Белая коробка не отображает вид при появлении клавиатуры - PullRequest
0 голосов
/ 29 октября 2018

По какой-то причине после обновления флаттера один из разделов моего приложения был поврежден. У меня есть список виджетов текстовой формы, установленный в 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 голосов
/ 31 октября 2018

Ответы на эту тему указали мне правильное направление для решения проблемы.

У меня было три глубоких вложенных подмостка, где у двух самых внутренних был этот набор:

resizeToAvoidBottomPadding: false

Тем не менее, мой внешний Эшафот не сделал, вызывая эту проблему. Таким образом, оказывается, что хорошо иметь вложенные скаффолды, но вы должны убедиться, что для каждого из них установлено это свойство, чтобы избежать этой проблемы.

Смотрите также,

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...