听起来很简单,但是如何在flutter中创建多行可编辑文本字段?TextField仅适用于单行。
编辑:一些精度,因为似乎不清楚。虽然您可以设置多行以虚拟包装文本内容,但仍然不是多行。它是单行显示为多行。如果您想做这样的事情,那您就做不到。因为您无权访问ENTER
按钮。而且没有输入按钮意味着没有多行。
听起来很简单,但是如何在flutter中创建多行可编辑文本字段?TextField仅适用于单行。
编辑:一些精度,因为似乎不清楚。虽然您可以设置多行以虚拟包装文本内容,但仍然不是多行。它是单行显示为多行。如果您想做这样的事情,那您就做不到。因为您无权访问ENTER
按钮。而且没有输入按钮意味着没有多行。
Answers:
要使用自动换行,只需将其设置 maxLines
为null
:
TextField(
keyboardType: TextInputType.multiline,
maxLines: null,
)
如果该maxLines
属性为null
,则行数没有限制,并且启用了自动换行。
如果希望TextField适应用户输入,请执行以下操作:
TextField(
keyboardType: TextInputType.multiline,
minLines: 1,//Normal textInputField will be displayed
maxLines: 5,// when user presses enter it will adapt to it
);
在这里将最大行数设置为您想要的任何值,您就可以开始了。我认为将maxlines设置为null不是一个好选择,我们应该将其设置为某个值。
尽管其他人已经提到可以使用键盘类型“ TextInputType.multiline”,但我还是想添加TextField的实现,该实现在输入新行时会自动调整其高度,因为通常需要模仿它的输入行为。 WhatsApp和类似的应用程序。
每次更改文本时,我都会为此分析输入中“ \ n”字符的数量。这似乎是一个过大的杀伤力,但是不幸的是,到目前为止,我没有找到更好的方法来实现Flutter的这种性能,即使在较旧的智能手机上,我也没有发现任何性能问题。
class _MyScreenState extends State<MyScreen> {
double _inputHeight = 50;
final TextEditingController _textEditingController = TextEditingController();
@override
void initState() {
super.initState();
_textEditingController.addListener(_checkInputHeight);
}
@override
void dispose() {
_textEditingController.dispose();
super.dispose();
}
void _checkInputHeight() async {
int count = _textEditingController.text.split('\n').length;
if (count == 0 && _inputHeight == 50.0) {
return;
}
if (count <= 5) { // use a maximum height of 6 rows
// height values can be adapted based on the font size
var newHeight = count == 0 ? 50.0 : 28.0 + (count * 18.0);
setState(() {
_inputHeight = newHeight;
});
}
}
// ... build method here
TextField(
controller: _textEditingController,
textInputAction: TextInputAction.newline,
keyboardType: TextInputType.multiline,
maxLines: null,
)
TextField
具有maxLines属性。
用这个
TextFormField(
keyboardType: TextInputType.multiline,
maxLines: //Number_of_lines(int),)
指定TextInputAction.newline以使TextField响应回车键并接受多行输入:
textInputAction: TextInputAction.newline,
对于TextFormField小部件,如果要设置行数固定值,则可以设置minLines和maxLines。否则,您也可以将maxLines设置为null。
TextFormField(
minLines: 5,
maxLines: 7,
decoration: InputDecoration(
hintText: 'Address',
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
),
),
),
maxLines: null
。没有嗨,它似乎不起作用