我尝试构建一个聊天应用程序,其中“新消息”屏幕包含收件人和消息。我希望TextField填满屏幕上的剩余空间。就像HTML中的Textarea。

  • 我尝试将maxLines增加到一个较大的数字,这会导致使用“ float 操作按钮”导致像素溢出错误。
  • 我尝试将其包装在对它没有影响的Expanded小部件中。

  • 这是我当前的布局结构:
        body: new Column(
            children: <Widget>[
              new ListTile(
                dense: false,
                title: new Text("Alex XYZ",
                    //...
              ),
              Divider(),
              new TextField(
                  decoration: InputDecoration(hintText: "Insert your message",),
                  scrollPadding: EdgeInsets.all(20.0),
                  autofocus: true,
              )
            ],
          ),
    

    使用上面代码中的TextField,我什至不能写多行。如果添加maxLines:2我可以按Enter键向下移动,但这看起来并不干净,您无法在该区域滚动。

    我希望有人能帮助我将其扩展到整个屏幕。

    最好的问候亚历克斯!

    最佳答案

    现在,您可以使用maxline 99999,因为如果我们通过,则flutter中已经存在开放问题
    maxline中的double.infinity.toInt()用于无限行。

    因此,要创建具有滚动功能的多行textview,可以将maxline 99999与SingleChildScrollView一起使用
    小部件如下。它将允许您滚动以及maxline。

    如果您使用以下示例,它也将适合屏幕显示:

    return Scaffold(
          appBar: AppBar(
            // Here we take the value from the MyHomePage object that was created by
            // the App.build method, and use it to set our appbar title.
            title: Text(widget.title),
          ),
          body: Center(
            child: SingleChildScrollView(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  TextField(
                    decoration: InputDecoration(hintText: "Insert your message",),
                    scrollPadding: EdgeInsets.all(20.0),
                    keyboardType: TextInputType.multiline,
                    maxLines: 99999,
                    autofocus: true,)
                ],
              ),
            ),
          ),
          resizeToAvoidBottomPadding: true,
        );
    

    10-06 04:37