文本字段使用多行keyboardType限制行数

时间:2019-01-20 16:21:02

标签: flutter

使用带有keyboardType:TextInputType.multiline的Textfield不会限制用户可以输入的最大行数。

new TextField(
    keyboardType: TextInputType.multiline,
    maxLines: 4,  
    maxLength: 30,
) 

在此示例中,用户可以添加30个换行符,是否有某种方法可以限制用户使用TextField属性输入的行数?

稍后我可以使用自己的方法解析文本,但是我的问题是要查找是否有任何TextField属性可以帮助解决此问题。

谢谢!

1 个答案:

答案 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的解决方法有点棘手,因为那样便无法更改光标位置。但是我的目标是向您显示此问题和快速解答。如果喜欢,请使用它,否则请评论。而且,如果您找到了更好的方法,请毫不犹豫地改善我的代码!