テキストフィールドに初期値を指定するにはどうすればよいですか?


142

テキストフィールドに初期値を指定し、空の値で再描画してテキストをクリアしたいのですが。FlutterのAPIでそれを行うための最良のアプローチは何ですか?

回答:


105

(メーリングリストから。この答えは思いつきませんでした。)

class _FooState extends State<Foo> {
  TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = new TextEditingController(text: 'Initial value');
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new TextField(
          // The TextField is first built, the controller has some initial text,
          // which the TextField shows. As the user edits, the text property of
          // the controller is updated.
          controller: _controller,
        ),
        new RaisedButton(
          onPressed: () {
            // You can also use the controller to manipuate what is shown in the
            // text field. For example, the clear() method removes all the text
            // from the text field.
            _controller.clear();
          },
          child: new Text('CLEAR'),
        ),
      ],
    );
  }
}

ヒントサーバーも同じ目的だと思います。
dhuma1981

3
回答でどのメーリングリストを参照しましたか?
stt106 2018年

2
そして、テキストフィールド値を初期値に追加/オーバーライドするにはどうすればよいですか?
stuckedoverflow

2
また、ウィジェットの破棄に_controllerを必ず破棄してください。Googleで推奨されています。これにより、必要のないときにリソースが解放されます。
Amrit Pal Singh

89

TextFormField代わりにTextFieldを使用して、initialValueプロパティを使用できます。例えば

TextFormField(initialValue: "I am smart")

2
何らかの理由で、動的オブジェクトではこれを使用できませんでした。コントローラーが必要になってしまいました。
S1r-Lanzelot

6
これは、コントローラーがTextFormFieldで指定されていない場合にのみ有効です。docs.flutter.io/flutter/material/TextFormField/...
アレックスFallenstedt

このプロパティの必要がない@AlexFallenstedtときコントローラが利用可能である
サミKanafani

ウィジェットツリーを再構築するときに、テキストを初期値に置き換えることができるため、これは危険だと思います。
GökberkYağcı

46

ウィジェットスコープで別の変数を定義する必要はありません。インラインで定義するだけです。

TextField(
  controller: TextEditingController()..text = 'Your initial value',
  onChanged: (text) => {},
)

「TextEditingController().. text」の二重ドットは何を意味していますか?
レイリー

3
@RayLiカスケード演算子と呼ばれます。ここでの情報と例のチェックのためにstackoverflow.com/questions/53136945/...
vovahost

1
ありがとう!これは、オブジェクトのリストからウィジェットを動的に作成するのに最適です:)
davaus

これは私が探していたものです!どうもありがとう!
TaeJung Shim

1
@vovahost残念ながら、dispose部分がありません。
Chris Rutkowski

28

TextEditingControllerを使用している場合は、以下のようにテキストを設定します

TextEditingController _controller = new TextEditingController();


_controller.text = 'your initial text';

final your_text_name = TextFormField(
      autofocus: false,
      controller: _controller,
      decoration: InputDecoration(
        hintText: 'Hint Value',
      ),
    );

TextEditingControllerを使用していない場合は、以下のようにinitialValueを直接使用できます

final last_name = TextFormField(
      autofocus: false,
      initialValue: 'your initial text',
      decoration: InputDecoration(
        hintText: 'Last Name',
      ),
    );

詳細については、TextEditingController


textプロパティのドキュメントに従って初期値をプロパティに設定するのが良い考えかどうかTextEditingController.textはわかりません:これを設定すると、このTextEditingControllerのすべてのリスナーに更新が必要であることを通知します(notifyListenersを呼び出します)。このため、この値はフレーム間でのみ設定する必要があります。たとえば、ビルド、レイアウト、またはペイントフェーズではなく、ユーザーアクションへの応答として。(api.flutter.dev/flutter/widgets/TextEditingController/text.html
キリルのKarmazin

15

ここでこれを実行する多くの方法を見てきました。ただし、これは他の回答よりも少し効率的または少なくとも簡潔だと思います。

TextField(
   controller: TextEditingController(text: "Initial Text here"),
)

7

TextInput受け入れられた回答へのコメントで@MRTによって要求された複数のを処理する場合は、初期値を取得して次のTextEditingControllerようなものを返す関数を作成できます。

initialValue(val) {
  return TextEditingController(text: val);
}

次に、この関数をのコントローラーとして設定し、TextInputその初期値を次のように指定します。

controller: initialValue('Some initial value here....')

これを他TextInputのに対して繰り返すことができます。


4

これはを使用して実現できますTextEditingController

追加できる初期値を持つために

TextEditingController _controller = TextEditingController(text: 'initial value');

または

使用しTextFormFieldている場合は、initialValueプロパティがあります。これは基本的にこれinitialValueをコントローラーに自動的に提供します。

TextEditingController _controller = TextEditingController();
TextFormField(
  controller: _controller,
  initialValue: 'initial value'
)

テキストをクリアするには、_controller.clear()メソッドを使用できます 。


3

クラス内、

  final usernameController = TextEditingController(text: 'bhanuka');

テキストフィールド、

   child: new TextField(
        controller: usernameController,
    ...
)

3
TextEdittingController _controller = new TextEdittingController(text: "your Text");

または

@override
  void initState() {
    super.initState();
    _Controller.text = "Your Text";
    }

-12

これに対する回答が見つからない場合、およびここに来て回答を探しているInputDecoration場合:フィールドのhintTextを確認してください。

new TextField(
  decoration: new InputDecoration(
    hintText:"My Text String."
  ),
...

ヒントテキストは初期値ではありません。ユーザーが何かを入力すると、消えます。最初のテキストは、ユーザーのために何かを事前に書き込むようなものです。
アルマンOrdookhani

これはヒントのテキストで、値のイニシャライザではありません
MRT

2
それは本当ですが、これはヒントテキストを探してここに来て、それを何と呼ぶべきかわからない人に適しています。
ThinkDigital
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.