Flutter textfield以用户类型展开

Rob*_*ert 13 flutter

我有一个文本字段,需要有如下所示的多行,以便文本换行,但它占用了maxLines中定义的所有行的空间.我希望能够让它看起来像1行,并随着文本的包装而扩展.任何关于如何做到这一点的想法都是颤抖的?

new TextField(
                decoration: const InputDecoration(
                  hintText: 'Reply',
                  labelText: 'Reply:',
                ),
                autofocus: false,
                focusNode: _focusnode,
                maxLines: 1,
                controller: _newreplycontroller,
                keyboardType: TextInputType.text,
              ),
Run Code Online (Sandbox Code Playgroud)

Dan*_*eld 30

设置maxLines为null,它将自动垂直增长.

它的记录(但不完全清楚的)这里(编辑:我创建了一个PR更新此,我应该已经做了,开始对这个问题).为了解决这个问题,我最终查看了代码TextField及其超类(es),看看如果设置为null将会是什么行为.

所以你的代码应该如下:

new TextField( 
  decoration: const InputDecoration(
    hintText: 'Reply',
    labelText: 'Reply:',
  ),
  autofocus: false,
  focusNode: _focusnode,
  maxLines: null,
  controller: _newreplycontroller,
  keyboardType: TextInputType.text,
),
Run Code Online (Sandbox Code Playgroud)

如果你试图水平自动增长,你可能不应该 - 至少不是基于文本内容.但我想你想让它垂直自动增长.

  • @AnandSuthar - 自从这个答案以来,事情发生了一些变化。您现在可以在更多配置中设置 minLines 和 maxLines,但我不知道这是否使其稳定。您可以尝试开发(或者可能是测试版)。 (3认同)
  • ^ 正好相反。它将垂直增长,而不是水平增长。 (2认同)

小智 25

使用这个应该可以解决问题:

keyboardType: TextInputType.multiline,
minLines: 1,
maxLines: 20,
maxLength: 1000,
Run Code Online (Sandbox Code Playgroud)

添加 minLines 和 MaxLines 对于获得所需的行为非常重要,而 maxLength 则是一种享受!

也许为时已晚,但迟到总比不到好!


Kyl*_*enn 10

接受的答案对于垂直增长非常有效。如果您希望TextField从小处开始并随着用户键入而水平扩展,您可以执行以下操作:

IntrinsicWidth(
  child: TextField(...
),
Run Code Online (Sandbox Code Playgroud)

就我而言,我希望它位于屏幕中心(水平),所以我这样做了:

Center(
   child: IntrinsicWidth(
      child: TextField()
   )
)
Run Code Online (Sandbox Code Playgroud)


Rab*_*han 6

如第一个答案所示,将 maxLines 设置为 null 即可解决问题。然而,这将允许文本字段无限增长。

要获得更多控制,请根据需要将 minLines 设置为 1 和 maxLines。希望这可以帮助!

代码示例:TextField(minLines:1,maxLines:8)