string.codeUnits is an array of Unicode UTF-16 code units. So i would say it could be like int maxLengthOfTextField(String text){ final int maxBits = 128; List<int> unicodeSymbols = text.codeUnits.where((ch) => ch > maxBits ).toList(); return unicodeSymbols.length > 0 ? 160 : 70; } final textFieldController = TextEditingController(); TextField( controller: textFieldController, maxLength: maxLengthOfTextField(textFieldController.text) );
修改后成为:
child: TextField( decoration: InputDecoration( hintStyle: TextStyle(fontSize: 17), hintText: 'Search your trips', // suffixIcon: Icon(Icons.search), counterText: "", border: InputBorder.none, contentPadding: EdgeInsets.all(20), ), maxLength: 480, controller: textController, onChanged: _onChanged, ),
_onChanged(String value) { // print(value); final int maxBits = 128; List<int> unicodeSymbols = value.codeUnits.where((ch) => ch > maxBits ).toList(); if(unicodeSymbols.length > 0) { setState(() { ifContainUnicode = "unicode"; }); } else { setState(() { ifContainUnicode = "bit"; }); } setState(() { charLength = value.length; }); }
这个网址也可以看一下; https://dev.to/stack-labs/flutter-utf8-textfield-length-limiter-and-char-counter-31o7