当键盘出现时,白框会遮挡视图

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没有,导致了这个问题。所以事实证明嵌套脚手架很好,但您必须确保每个脚手架都有 属性 设置以避免此问题。

另见,

https://github.com/flutter/flutter/issues/7036