当键盘出现时,白框会遮挡视图
White Box Obscures View When Keyboard Appears
由于某种原因,更新 flutter 后,我的应用程序的一个部分已损坏。我在 SingleChildScrollView 中设置了一个文本表单小部件列表。每当我按下其中一个文本表单时,键盘就会出现,一个空的白框会自动向上推到视野中,遮住文本输入框。
在我听从这个 link 的建议之前,在列表视图中输入文本时遇到一些问题:https://www.didierboelens.com/2018/04/hint-4-ensure-a-textfield-or-textformfield-is-visible-in-the-viewport-when-has-the-focus/
有效解决了我之前遇到的键盘出现时文本输入框不可见的问题。但是现在 while 框出现并遮挡了视图。我还确保使用:
resizeToAvoidBottomPadding: false
这是经常建议的。
下面是与文本字段小部件代码之一相关的代码:
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new SafeArea(
child: new Form(
key: _formKey,
child: new SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
circumstances(),
divider(),
description(),
divider(),
externalHappenings(),
divider(),
internalHappenings(),
divider(),
reflectionsAndCorrections(),
divider(),
abatement(),
divider(),
footerButtons()
],
),
)
)
),
resizeToAvoidBottomPadding: false,
);
}
Widget circumstances() {
return new EnsureVisibleWhenFocused(
focusNode: _focusNodeCircumstances,
child: new TextFormField(
controller: _circumstancesController,
maxLines: maxLines,
decoration: const InputDecoration(
border: const OutlineInputBorder(
borderRadius: const BorderRadius.all(const Radius.circular(0.0)),
borderSide: const BorderSide(color: Colors.black, width: 1.0)
),
filled: true,
labelText: "Circumstances",
hintText: "Who was there? Where were you?",
),
autofocus: true,
validator: (value) {
_activeJournalEntry.setCircumstances(value);
if(value == null || value.isEmpty) {
return "Please enter some circumstances.";
}
},
focusNode: _focusNodeCircumstances,
),
);
}
对该主题的回复为我指明了解决问题的正确方向。
我有三个深层嵌套的脚手架,其中最里面的两个有这个集合:
resizeToAvoidBottomPadding: false
但是,我的最外层的Scaffold没有,导致了这个问题。所以事实证明嵌套脚手架很好,但您必须确保每个脚手架都有 属性 设置以避免此问题。
另见,
由于某种原因,更新 flutter 后,我的应用程序的一个部分已损坏。我在 SingleChildScrollView 中设置了一个文本表单小部件列表。每当我按下其中一个文本表单时,键盘就会出现,一个空的白框会自动向上推到视野中,遮住文本输入框。
在我听从这个 link 的建议之前,在列表视图中输入文本时遇到一些问题:https://www.didierboelens.com/2018/04/hint-4-ensure-a-textfield-or-textformfield-is-visible-in-the-viewport-when-has-the-focus/
有效解决了我之前遇到的键盘出现时文本输入框不可见的问题。但是现在 while 框出现并遮挡了视图。我还确保使用:
resizeToAvoidBottomPadding: false
这是经常建议的。
下面是与文本字段小部件代码之一相关的代码:
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new SafeArea(
child: new Form(
key: _formKey,
child: new SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
circumstances(),
divider(),
description(),
divider(),
externalHappenings(),
divider(),
internalHappenings(),
divider(),
reflectionsAndCorrections(),
divider(),
abatement(),
divider(),
footerButtons()
],
),
)
)
),
resizeToAvoidBottomPadding: false,
);
}
Widget circumstances() {
return new EnsureVisibleWhenFocused(
focusNode: _focusNodeCircumstances,
child: new TextFormField(
controller: _circumstancesController,
maxLines: maxLines,
decoration: const InputDecoration(
border: const OutlineInputBorder(
borderRadius: const BorderRadius.all(const Radius.circular(0.0)),
borderSide: const BorderSide(color: Colors.black, width: 1.0)
),
filled: true,
labelText: "Circumstances",
hintText: "Who was there? Where were you?",
),
autofocus: true,
validator: (value) {
_activeJournalEntry.setCircumstances(value);
if(value == null || value.isEmpty) {
return "Please enter some circumstances.";
}
},
focusNode: _focusNodeCircumstances,
),
);
}
对该主题的回复为我指明了解决问题的正确方向。
我有三个深层嵌套的脚手架,其中最里面的两个有这个集合:
resizeToAvoidBottomPadding: false
但是,我的最外层的Scaffold没有,导致了这个问题。所以事实证明嵌套脚手架很好,但您必须确保每个脚手架都有 属性 设置以避免此问题。
另见,