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

时间:2018-10-28 21:52:23

标签: flutter flutter-layout

由于某种原因,更新颤动后,我的应用程序其中一个部分已损坏。我在SingleChildScrollView中设置了文本表单小部件的列表。每当我按下其中一种文本形式时,就会出现键盘,并且空白的空白框会将自身向上推入视野,从而使文本输入框变得模糊。

enter image description here

在遇到列表视图中的文本输入问题后,我才遵循以下链接的建议: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,

  ),
);

}

1 个答案:

答案 0 :(得分:2)

对此主题的回复为我指明了解决问题的正确方向。

我有3个深层嵌套的脚手架,其中最里面的2个有此设置:

resizeToAvoidBottomPadding: false

但是,我最外面的脚手架却没有,从而导致了此问题。因此,事实证明,嵌套嵌套脚手架是可以的,但是您必须确保每个支架都具有该属性集,以免发生此问题。

另请参阅

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