FlutterでHookWidgetを使用してRadioListTileを作成しよう!

こんにちは。 エキサイトの奥田です。

Advent Calendarの季節が今年もやってきました。
昨年同様、エキサイトホールディングス Advent Calendarで毎日投稿される予定です。 様々な話題が投稿されるのでぜひ閲覧してみてください!

qiita.com

今回はFlutterでHookWidgetを使用したラジオボタンの実装についての記事を書いていきます。

完成品

下記の画像のようなRadioButtonを含んだリストを作成します。 挙動としては対象のリストをクリックした場合に対象のアイテムに選択状態が切り替わることを実現します。

実装内容

class MyHomePage extends HookWidget {
  const MyHomePage({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final sampleList = [
      'サンプル1',
      'サンプル2',
      'サンプル3',
      'サンプル4',
      'サンプル5',
    ];

    //選択しているアイテムのindexを初期値0として保持
    final selectedIndex = useState(0);

    return Scaffold(
      appBar: AppBar(
        title: const Text('ラジオボタン'),
      ),
      body: ListView.builder(
        //対象アイテムの数を取得
        itemCount: sampleList.length,
        itemBuilder: (_, index) {
          final sampleItem = sampleList[index];
          return RadioListTile(
            title: Text(sampleItem),
            value: index,
            //ラジオボタンが対象とするグループを指定
            groupValue: selectedIndex.value,
            onChanged: (int? value) {
              //ラジオボタンが変更された場合に選択されたindexを渡す
              selectedIndex.value = index;
            },
          );
        },
      ),
    );
  }
}

上記のようにselectedIndexをgroupValueに指定することで、選択されたアイテムのindexに応じてUIを変更しています。 StatefulWidgetに比べるとindexの管理が簡潔になり、追いやすい実装になると感じました。

下記が選択後の画面になります。

まとめ

今回は簡単に静的なListを使用し、UI表示、機能の実装を行いました。 useStateを使用すると簡易な状態を管理することができ、改めて実装がしやすいと感じました。

最後に

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。 カジュアル面談はこちらになります! meety.net

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com