这可能听起来容易,但我们如何能做一个多行可编辑的文本域颤振?TextField只与单行工作。

编辑:一些精确度,因为看起来不清楚。 虽然您可以将multiline设置为虚拟换行文本内容,但它仍然不是多行。它是一行显示成多行。 如果你想做这样的事,那就不行。因为你没有回车键。没有回车键就没有多路线路。


当前回答

虽然这个问题是相当老的,没有广泛的答案,解释如何动态调整TextField与很少的开发人员的努力。这是特别重要的,当TextField是放在一个flexbox,如ListView, SingleChildScrollView等(flexbox将无法确定一个可扩展的TextField的内在大小)。

正如许多其他用户所建议的那样,像这样构建你的TextField:

TextField(
  textInputAction: TextInputAction.newline,
  keyboardType: TextInputType.multiline,
  minLines: null,
  maxLines: null,  // If this is null, there is no limit to the number of lines, and the text container will start with enough vertical space for one line and automatically grow to accommodate additional lines as they are entered.
  expands: true,  // If set to true and wrapped in a parent widget like [Expanded] or [SizedBox], the input will expand to fill the parent.
)

如何应对TextField的内在高度缺失?

将TextField包装在一个intrinsic height类中,以提供动态计算的可扩展TextField的内在高度给它的父类(当通过例如flexbox请求时)。

其他回答

这段代码为我工作,我也能够使用ENTER的网页和移动。

@override
  Widget build(BuildContext context) {
      double width = MediaQuery.of(context).size.width;
      double height = MediaQuery.of(context).size.height;
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start, 
      children: [
      Container(
        child: ConstrainedBox(
          //  fit: FlexFit.loose,
          constraints:  BoxConstraints(
            maxHeight: height,//when it reach the max it will use scroll
            maxWidth: width,
          ),
          child: const TextField(
            keyboardType: TextInputType.multiline,
            maxLines: null,
            minLines: 1,
            decoration: InputDecoration(
              fillColor: Colors.blueAccent,
              filled: true,
              hintText: "Type  ",
              border: InputBorder.none,
            ),
          ),
        ),
      )
    ]);
  }

指定TextInputAction。newline使TextField响应enter键并接受多行输入:

textInputAction: TextInputAction.newline,

官方文件指出: maxLines属性可以设置为null,以消除对行数的限制。默认情况下,它是1,这意味着这是一个单行文本字段。

注意:maxLines不能为零。

虽然这个问题是相当老的,没有广泛的答案,解释如何动态调整TextField与很少的开发人员的努力。这是特别重要的,当TextField是放在一个flexbox,如ListView, SingleChildScrollView等(flexbox将无法确定一个可扩展的TextField的内在大小)。

正如许多其他用户所建议的那样,像这样构建你的TextField:

TextField(
  textInputAction: TextInputAction.newline,
  keyboardType: TextInputType.multiline,
  minLines: null,
  maxLines: null,  // If this is null, there is no limit to the number of lines, and the text container will start with enough vertical space for one line and automatically grow to accommodate additional lines as they are entered.
  expands: true,  // If set to true and wrapped in a parent widget like [Expanded] or [SizedBox], the input will expand to fill the parent.
)

如何应对TextField的内在高度缺失?

将TextField包装在一个intrinsic height类中,以提供动态计算的可扩展TextField的内在高度给它的父类(当通过例如flexbox请求时)。

TextField有maxLines属性。