【发布时间】:2020-07-04 01:10:59
【问题描述】:
我正在颤振中构建一个 RegisterPage,并将我的脚手架分成两个容器。一个用于上半部分,另一个用于下半部分,这样徽标/标题可以在上半部分,表格在下半部分。
现在我在 android 上测试后注意到键盘与输入字段重叠。所以我添加了一个 SingleChildScrollView() 视图来解决这个问题。但有一个问题。内容似乎太大了,即使键盘按下,您现在也可以随时滚动。我添加了一个视频来说明我的意思。
我认为这个空间对此负责
看起来该空间是为 android 导航栏保留的。我该如何删除它?或者我怎样才能以这样的方式调整我的容器大小,以便它们考虑到这一点?为了清楚起见,我最想知道的是如何在键盘按下时停止 SingleChildScrollView() 滚动,这可能是由于容器太大造成的。
the_register_page.dart
@override
Widget build(BuildContext context) {
final AuthenticationProvider authenticationProvider = Provider.of<AuthenticationProvider>(context);
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: Center(
child: ScrollConfiguration(
behavior: ScrollBehaviourWithoutGlow(),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
Container(
decoration: BoxDecoration(color: Colors.red),
height: MediaQuery.of(context).size.height / 2,
child: _buildLogo(),
),
Container(
decoration: BoxDecoration(color: Colors.green),
height: MediaQuery.of(context).size.height / 2,
child: _buildRegisterForm(authenticationProvider),
),
],
),
),
),
),
);
}
请注意,我使用了 SystemChrome.setEnabledSystemUIOverlays([]);在我的 main.dart 中。
main.dart
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return MultiProvider(
providers: [
ChangeNotifierProvider<PreferencesProvider>(
create: (_) => PreferencesProvider()),
ChangeNotifierProvider<AuthenticationProvider>(
create: (_) => AuthenticationProvider()),
Provider<GroupProvider>(create: (_) => GroupProvider()),
Provider<UserProvider>(
create: (_) => UserProvider(),
),
],
child: Consumer<PreferencesProvider>(
builder: (context, preferences, _) => MaterialApp(
home: TheSplashPage(),
routes: <String, WidgetBuilder>{
TheGroupPage.routeName: (BuildContext context) => TheGroupPage(),
TheSettingsPage.routeName: (BuildContext context) =>
TheSettingsPage(),
TheProfilePage.routeName: (BuildContext context) =>
TheProfilePage(),
TheGroupCreationPage.routeName: (BuildContext context) =>
TheGroupCreationPage(),
},
theme: preferences.isDarkMode
? DarkTheme.themeData
: LightTheme.themeData,
debugShowCheckedModeBanner: false,
),
),
);
}
}
由于这篇文章没有得到任何答案,我决定上传一个视频来说明我的意思。这是视频。如您所见,即使键盘按下,您也可以滑动,这不是我想要的。
https://www.youtube.com/watch?v=Rm91KMFqs60
编辑
这是在安卓模拟器上测试的
我的 android 设备是带有 android 7 的 Lenovo P2
编辑
我可以确认这个底部区域是原因。我查看了我的电脑屏幕上的像素高度,然后从容器中减去了它,现在当键盘按下时我无法滚动,这正是我想要的。
所以我想删除这个区域或知道它的高度如何?
【问题讨论】:
-
导航栏的自动隐藏行为是由您的应用还是由您的设备设置设置的?您使用什么设备和 Android 版本?你能在模拟器中复制它吗?
-
我将信息添加到我的帖子中。我在 main.dart 中设置了隐藏行为。我在自己的设备上测试了它,一个带有 android 7 的 Lenovo P2 和一个带有 android 10 的 Pixel 2