見出し画像

[Flutter]TextFormFieldとGlobalKeyの使い方

今日は、FlutteのTextFormFieldGlobalKeyの使い方について解説します。

TextFormFieldとは?

TextFormFieldは、TextFieldをFormFieldでラップしたwidgetのことです。(TextFieldは、FlutterのUIフレームワークの一部であり、ユーザーがテキストを入力できる場所を提供するwidgetのこと)
使い方としては、例えばログイン画面においてIDやパスワードを入力させたり、コメントを書くフォームを提供したりする場合に役立ちます。
これには、バリデーション機能も内蔵されており、IDが入力されていなかったら入力させるように促す、といった使い方もできます。

GlobalKeyとは?

GlobalKeyは、Flutterの全てのウィジェット間で一意なキーを生成するためのクラスです。
これは、特定のウィジェットへのアクセスや、ウィジェットの状態を変更する際に役立ちます。

コード例

以下にTextFormFieldGlobalKeyを使用する例を記載します。


final _formKey = GlobalKey<FormState>();

Form(
  key: _formKey,
  child: Column(
    children: <Widget>[
      TextFormField(
        validator: (value) {
          if (value == null || value.isEmpty) {
            return '情報を入力してください';
          }
          return null;
        },
      ),
      ElevatedButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(content: Text('データを処理中...')),
            );
          }
        },
        child: const Text('送信'),
      ),
    ],
  ),
);

上記のコードでは、final _formKey = GlobalKey<FormState>();で_formKeyにGlobalKeyを格納し、_formKeyをFormウィジェットのkeyプロパティに割り当てています。
このkeyにより、Form内のTextFormFieldの状態にアクセスし、ボタンが押された時にその値を検証することができます。
以下の部分ではvalidatorを使って、TextFormFieldに入力された値(value)が、null、もしくは空であった場合に、'情報を入力してください'という文字を画面に表示するようにしています。

TextFormField(
        validator: (value) {
          if (value == null || value.isEmpty) {
            return '情報を入力してください';
          }
          return null;
        },
      ),

以下の部分では、ユーザーがタップすることができるボタンであるElevatedButtonウィジェットを作成しています。
ElevatedButtonをタップ(onPressed:)したあとの処理において、_formKey.currentState!.validate()の部分では、フォームの全てのTextFormFieldvalidatorが実行され、全てのFieldに入力された値が何も問題なく有効であると判断されたら、SnackBarが表示されるようになっています。

ElevatedButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(content: Text('データを処理中...')),
            );
          }
        },
        child: const Text('送信'),
      ),

まとめ

今日は、TextFormFieldGlobalKeyの使い方を解説しました。これらはFlutterでフォームを扱う際に非常に役立つツールです。特にGlobalKeyは状態を持つウィジェットへのアクセスを容易にし、アプリケーションの動作をより柔軟に制御できます。

この記事が気に入ったらサポートをしてみませんか?