web-dev-qa-db-ja.com

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

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

99
Seth Ladd

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

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'),
        ),
      ],
    );
  }
}
76
Seth Ladd

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

TextFormField(initialValue: "I am smart")
62
Sami Kanafani

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

25
Nirav Bhavsar

ウィジェットスコープで個別の変数を定義する必要はなく、インラインで行うだけです。

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

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

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

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

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

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

7
Muaad

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

TextField(
   controller: TextEditingController(text: "Initial Text here"),
)
6
kent
TextEdittingController _controller = new TextEdittingController(text: "your Text");

または

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

クラス内

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

TextField、

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