代码之家  ›  专栏  ›  技术社区  ›  jared-nelsen

键盘将文本字段推离屏幕

  •  2
  • jared-nelsen  · 技术社区  · 6 年前

    我一直在处理一个奇怪的情况,我只是想不出来。

    问题是,当我试图在任何可滚动小部件中使用任何类型的文本字段时,当我轻触文本字段以使键盘弹出时,键盘会将文本字段从屏幕上推开。脚手架上的东西都是空的。

    我不能确切地说到底发生了什么,但有时似乎键盘将可滚动视图的内容向上推过视图,但有时似乎只是在键盘顶部附加了一个巨大的白色框来覆盖上下文。我做了几次实验,但我无法确定具体的行为。

    为了清楚起见,我试过使用SingleChildScrollView和ListView。行为是一样的。

    我通读了这篇文章,并尝试了解决方法,但没有成功: https://github.com/flutter/flutter/issues/10826

    我也试过使用这种解决方法: https://gist.github.com/collinjackson/50172e3547e959cba77e2938f2fe5ff5

    然而,我只是不确定我是否有与那些线程完全相同的问题。

    下面是一个代码片段,演示了这个问题和一些屏幕截图。我只是在做一些明显的错误吗?

    class MakeEntryView extends StatefulWidget {
    
       @override
       State<StatefulWidget> createState() => new MakeEntryState();
    
    }
    
    class MakeEntryState extends State<MakeEntryView> {
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          body: new SingleChildScrollView(
          child: new Container(
            child: new Column(
              children: <Widget>[
                new TextField(),
                new TextField(),
                new TextField(),
                new TextField(),
                new TextField(),
                new TextField(),
                new TextField(),
              ],
            ),
          ),
        )
      );
    }
    
    @override
    void initState() {
      super.initState();
    }
    
    @override
    void dispose() {
      super.dispose();
    }
    
    }
    

    在按下文本字段之前

    With Text Boxes

    按文本字段后

    After Pressing Text Field

    1 回复  |  直到 6 年前
        1
  •  4
  •   scottstoll2017    6 年前

    脚手架有一个适当的处理方法:

    Scaffold(
      resizeToAvoidBottomPadding: false,
    

    有少数情况下,它不起作用,但应该照顾它。