2017-07-06 6 views
0

TextFieldウィジェットには、入力できる文字数を制限する "制限"属性がないようです。 TextFieldウィジェットでは、特定の文字数だけを入力として提供することができます。私はデコレーションのプロパティを見て、何とかそこに限界を設定しようとしましたが、どちらもうまくいかないようです。私が使用すべき別のウィジェットはありますか?フラッターのテキストフィールドのサイズを制限するにはどうすればよいですか?

答えて

1

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; 
     } 
    } 
); 
1

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; 
     } 

    } 
) 

私はそれが今までそれを乗り越えた場合、それが最後のタイプの前にあったものに戻りますので、ガイドライン内に収まるようにテキストフィールドを制御することができますよ。

関連する問題