Flutter textfield以用户类型展开

时间:2018-03-05 12:55:43

标签: flutter

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

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

7 个答案:

答案 0 :(得分:16)

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

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

所以你的代码应该如下:

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

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

答案 1 :(得分:2)

设置为null与设置为1相同(它仅水平增长一行)。

我认为您必须设置minLines和maxLines。 我使用的是minLines:1和maxLines:2,当第一行到达末尾时,它将展开另一行。当第二行到达末尾时,将第二行滚动到第一行并创建第三行。因此,您也必须设置maxLenght。

答案 2 :(得分:2)

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

要进行更多控制,请根据需要将minLines设置为1,将maxLines设置为。 希望这会有所帮助!

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

答案 3 :(得分:0)

@Rabi Roshan,

如第一个答案所示,将maxLines设置为null将执行 招。但是,这将使文本字段无限增长。

要进行更多控制,请根据需要将minLines设置为1,将maxLines设置为。希望 这有帮助!

非常感谢您!

我也更喜欢此版本,因为它只会在用户输入多行时才会扩展。如果超过了maxLines,它将垂直滚动,这通常是正常情况以及所有大型Chat Apps使用的功能。

答案 4 :(得分:0)

<块引用>

textfield 并且需要如下多行以便文本换行,但是它占用了 maxLines 中定义的所有行的空间。我希望能够让它看起来像 1 行并随着文本换行而展开

Container(
            child: new TextField (
              keyboardType: TextInputType.multiline,
              minLines: 1,
              maxLines: 10,
              decoration: new InputDecoration(
                  border: new OutlineInputBorder(
                    borderRadius: const BorderRadius.all(
                      const Radius.circular(10.0),
                    ),
                  ),
                  filled: true,
                  hintStyle: new TextStyle(color: Colors.grey[800]),
                  hintText: "Type in your text",
                  fillColor: Colors.white70),
            ),
            padding: new EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 16.0),
          );

答案 5 :(得分:0)

使用它应该可以解决问题:

keyboardType: TextInputType.multiline,
minLines: 1,
maxLines: 20,
maxLength: 1000,

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

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

答案 6 :(得分:-1)

设置expands: true

TextField(
  maxLines: null,
  expands: true, 
  keyboardType: TextInputType.multiline,
)