TextFieldウィジェットには、入力できる文字数を制限する「制限」属性がないようです。特定の数の文字のみをTextFieldウィジェットの入力として提供できるようにするにはどうすればよいですか。何らかの方法で装飾プロパティを調べて、そこに制限を設定する可能性がありますが、それも機能しないようです。使用する必要がある別のウィジェットはありますか?
RSprouteの説明にスニペットを追加する必要がありました。完全なコードはここにあります:
TextEditingController _controller = new TextEditingController();
String text = ""; // empty string to carry what was there before it
onChanged
int maxLength = ...
...
new TextField(
controller: _controller,
onChange: (String newVal) {
if(newVal.length <= maxLength){
text = newVal;
}else{
_controller.value = new TextEditingValue(
text: text,
selection: new TextSelection(
baseOffset: maxLength,
extentOffset: maxLength,
affinity: TextAffinity.downstream,
isDirectional: false
),
composing: new TextRange(
start: 0, end: maxLength
)
);
_controller.text = text;
}
}
);
maxLengthプロパティはFlutterで使用できます
https://docs.flutter.io/flutter/material/TextField/maxLength.html
textFieldのプロパティにmaxLength: 45,
を追加するだけです
TextEditingControllerを使用して、テキストフィールドに関するすべてを制御できます。したがって、この情報をTextFieldのonChangedイベントとペアにする場合は、そこで必要なロジックを実行できます。例えば:
TextEditingController _controller = new TextEditingController();
String text = ""; // empty string to carry what was there before it onChanged
int maxLength = ...
...
new TextField(
controller: _controller,
onChange: (String newVal) {
if(newVal.length <= maxLength){
text = newVal;
}else{
_controller.text = text;
}
}
)
ガイドライン内に収まるようにテキストフィールドを制御することができます。これを超えると、最後のタイプの前の状態に戻るからです。
inputFormattersプロパティを使用
例:
TextFormField(
inputFormatters: [
LengthLimitingTextInputFormatter(10),
]
)
名前空間
import 'package:flutter/services.Dart';
maxLengthプロパティを使用できますが、counterTextを空の文字列に設定することで、下部のカウンターテキストを非表示にできます。
new TextField(
maxLength: 10,
decoration: new InputDecoration(
counterText: '',
)
)