使用带有keyboardType:TextInputType.multiline的Textfield不会限制用户可以输入的最大行数。
new TextField(
keyboardType: TextInputType.multiline,
maxLines: 4,
maxLength: 30,
)
在此示例中,用户可以添加30个换行符,是否有某种方法可以限制用户使用TextField属性输入的行数?
稍后我可以使用自己的方法解析文本,但是我的问题是要查找是否有任何TextField属性可以帮助解决此问题。
谢谢!
答案 0 :(得分:0)
所以感觉像是一个问题。您可以找到它here。
将maxLines
设置为一个值,而不是null
,以扩展的TextField
开头,其行号等于maxLines
的值,但是随后,您可以输入尽可能多的行喜欢。
因此,为了给您一个可行的解决方法,我建议您使用TextController
。
final _myController = TextEditingController();
var _textFieldCorrectValue = '';
@override
void initState() {
// TODO: implement initState
_myController.addListener(_chekNumberOfLines);
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
_myController.dispose();
super.dispose();
}
并在您的TextField上使用它
TextField(
keyboardType: TextInputType.multiline,
maxLines: 4,
maxLength: 30,
controller: _myController,
),
这里是检查功能:
void _chekNumberOfLines() {
var _lines = _myController.text.split('\n');
if (_lines.length > 4) {
_myController.text = _textFieldCorrectValue;
} else {
_textFieldCorrectValue = _myController.text;
var cursorPos = _myController.selection;
// https://github.com/flutter/flutter/issues/11416
// workaround for cursor position
cursorPos = new TextSelection.fromPosition(new TextPosition(offset: _myController.text.length));
_myController.selection = cursorPos;
}
}
cursor position的解决方法有点棘手,因为那样便无法更改光标位置。但是我的目标是向您显示此问题和快速解答。如果喜欢,请使用它,否则请评论。而且,如果您找到了更好的方法,请毫不犹豫地改善我的代码!