Трепетание: невозможно разрешить ввод от пользователя

#dart #flutter

#дротик #флаттер

Вопрос:

Нормальная ситуация

введите описание изображения здесь


При открытии клавиатуры

Он показывает ошибку переполнения

введите описание изображения здесь


При resizeToAvoidBottomInset включении

Текстовое поле скрыто под клавиатурой

введите описание изображения здесь


Код:

 void main() => runApp(MaterialApp(home: HomePage()));

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // resizeToAvoidBottomInset: false, // including this hides TextField beneath Keyboard
      body: Column(
        children: <Widget>[
          FlutterLogo(size: 500),
          TextField(decoration: InputDecoration(hintText: "  Enter something here ...")),
          Expanded(child: FlutterLogo(size: 300)),
        ],
      ),
    );
  }
}
  

Редактировать:

Я хочу TextField , чтобы он автоматически прокручивался вверх, когда он находится в фокусе, это также означает, что FlutterLogo1 также должен прокручиваться вверх, а FlutterLogo2 должен быть под клавиатурой. (Это очень распространенное поведение в Android изначально, все обрабатывается за вас)

Комментарии:

1. Каков ваш ожидаемый пользовательский интерфейс? Я думаю, вам нужен полноэкранный логотип и текстовое поле на нем, ну, для такой вещи, почему бы вам не использовать stack. и вы указали жестко заданный размер, т.е. 500 в вашем пользовательском интерфейсе, что неправильно, поскольку при таком подходе вероятность переполнения больше.

2. @KalpeshKundanani Я отредактировал вопрос, чтобы добавить больше информации о том, что я ищу.

Ответ №1:

Я думаю, это сработает.

 
void main() => runApp(MaterialApp(home: HomePage()));

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // resizeToAvoidBottomInset: false, // including this hides TextField beneath Keyboard
      body: Stack(
        children: <Widget>[
          FlutterLogo(size: 500),
          Column(children: <Widget>[
            Container(
                margin: EdgeInsets.fromLTRB(0.0, 200.0, 0.0, 0.0),
                child: TextField( decoration: InputDecoration(hintText: "  Enter something here ..."))),
            Expanded(child: FlutterLogo(size: 300)),
          ],)

        ],
      ),
    );
  }
}

  

Комментарии:

1. Не очень хороший ответ, TextField он будет показан поверх 1-го FlutterLogo .

2. Спасибо за ответ, но, к сожалению, я не ищу обходного пути для использования Stack .