Flutter - SingleChildScrollView помещается в верхней части экрана, когда клавиатура всплывает - PullRequest
0 голосов
/ 23 октября 2018

Я хочу сделать простой экран, который показывает несколько текстовых полей в столбце, некоторое содержимое вверху и кнопку внизу.При первой попытке, без SingleChildScrollView, я получил ошибку «renderflex overflowed», которую можно устранить, поместив TextField в SingeChildScrollView.Теперь у меня проблема в том, что SingleChildScrollView находится слишком высоко на моем экране, когда я выбираю любой TextField, и клавиатура всплывает.Я хочу, чтобы он оставался в основном там, где он есть, поскольку достаточно места (желтого цвета) для клавиатуры под SingleChildScrollView. Этот Gif показывает поведение моего приложения.

Этот Gif показывает поведение, которое я ожидал. Я попытался применить код из примера FlatApp-Flutter к моему приложению, но не смог найти часть, которая на самом деле решает мою проблему.Кто-нибудь знает, как я могу контролировать, насколько клавиатура толкает SingleChildScrollView вверх или как я могу решить эту проблему?Большое спасибо.

Scaffold(
    backgroundColor: Colors.yellow,
    body: new SingleChildScrollView(
        controller: _scrollController,
        child: new Container(
          margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0),
          color: Colors.orange,
          child: new Column(children: <Widget>[
            new Container(
              margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 20.0),
              height: 200.0,
              width: 200.0,
              color: Colors.grey,
              child: new Center(
                child: Text("Show some stuff"),
              ),
            ),
            new Container(
              color: Colors.blue,
              child: new Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  new TextField(
                    decoration: InputDecoration(labelText: "Label 1"),
                  ),
                  new TextField(
                    decoration: InputDecoration(labelText: "Label 2"),
                  ),
                ],
              ),
            ),
            new RaisedButton(
              child: const Text('Start'),
              color: Theme.of(context).accentColor,
              textColor: Colors.white,
              elevation: 4.0,
              splashColor: Colors.blueGrey,
              onPressed: () {
                // Perform some action
                //button1(context);
              },
            ),
          ]),
        )));

}

1 Ответ

0 голосов
/ 24 октября 2018

Я исправил это.При реализации моей навигации я непреднамеренно поместил свой скаффолд в тело другого скаффолда, поэтому моя структура была такой:

Scaffold(
      appBar: AppBar(
        title: Text('My App'),
      ),
      body: ScaffoldShownInMyQuestion(),
    )

Возврат только SingleChildScrollView без обтекания второго скаффолда и использование его в качестве фиксированного теламоя проблема.

...