键盘将内容上推/调整屏幕大小

Boy*_*Boy 5 flutter flutter-layout

编辑

我得到了一个报告,该报告与键盘出现时的Flutter小部件调整大小相同。如何预防呢?。尽管这是相关的,但这是一个不同的问题。我希望键盘覆盖UI,直到到达具有焦点的TextField。这是Android上的默认行为

原版的:

我是一名Android开发人员,刚开始使用Flutter。我想创建一个登录屏幕。我想要上方的图片TextField。所以我想,我使用Stack来将图片放在背景中,并TextField在下面。

问题在于,一旦键盘出现,它就会将所有内容向上推。在Android上,通常只有在必要时才向上推键盘,直到到达为止EditText

我尝试将其设置resizeToAvoidBottomPadding为false,但是没有任何动作(当然),并且TextField键盘覆盖了。

我记得过去玩过iOS,这是默认行为,也许我应该重新考虑布局?

此刻,我将其包装为,ListView以便用户可以在键盘出现时进行滚动。

这是我的布局(仅用于测试)

@override
Widget build(BuildContext context) {
  this.context = context;
  return new Scaffold(
      key: _scaffoldKey,
      body: new Stack(
          children: <Widget>[loginImage(), new Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[new TextField(), new TextField(),
        new TextField(), new TextField(),
        new TextField(), new TextField()],
      )])
  );
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明在此处输入图片说明

Hah*_*ann 11

我在设置autoFocus: truea时遇到了这个问题,CupertinoTextField()并通过设置resizeToAvoidBottomPadding: false了它Scaffold()

  • 使用`resizeToAvoidBottomInset:false`,不推荐使用`resizeToAvoidBottomPadding`(/sf/answers/3926670541/)。 (3认同)

Kev*_*ter 3

我想这就是你想要的。最大的问题是你选择使用堆栈。仅当您想将东西堆叠在一起时才使用堆栈。在这种情况下,你不希望这样。我的做法是将其放置在一个列中,并用扩展组件填充开放空间(此小部件扩展至可用空间并将所有内容向下推)。我并不是说这是最好的方法(只有 2 周的 flutter 经验)。但这是一个办法。我希望它有帮助!

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
        return new MaterialApp(
            title: 'Flutter Demo',
            theme: new ThemeData(
                primarySwatch: Colors.blue,
            ),
            home: new Scaffold(
                body: new Column(
                    children: <Widget>[
                        new Center(
                            child: new Container(
                                height: 150.0,
                                width: 75.0,
                                color: Colors.red,
                            ),
                        ),
                        new Expanded(
                            child: new Container(),
                        ),
                        new Column(
                            crossAxisAlignment: CrossAxisAlignment.center,
                            mainAxisAlignment: MainAxisAlignment.end,
                            children: <Widget>[
                                new TextField(),
                                new TextField(),
                                new TextField(),
                                new TextField(),
                                new TextField(),
                                new TextField()
                            ],
                        ),
                    ],
                ),
            ),
        );
    }
}
Run Code Online (Sandbox Code Playgroud)