Select
Flutterでは二種類のSelect Widgetが提供されています。
Select Widgetは選択肢の中からユーザーが選択した情報を受け取ることに適しています。
ここではFlutterから提供されているSelect Widgetの使用方法をご紹介します。
- DropdownButton
- DropdownMenu
Flutterから提供されているSelect Widgetには上記種類があります。DropdownMenu
はテキスト入力が可能であり、選択肢の検索ができる特徴があります。
DropdownButton(value: selectedValue,items: const [DropdownMenuItem(value: "Apple", child: Text("Apple")),DropdownMenuItem(value: "Grape", child: Text("Grape")),DropdownMenuItem(value: "Lemon", child: Text("Lemon")),],),DropdownMenu(initialSelection: "Red",dropdownMenuEntries: [DropdownMenuEntry(value: "Red", label: "Red"),DropdownMenuEntry(value: "Green", label: "Green"),DropdownMenuEntry(value: "Blue", label: "Blue"),])
DropdownButton
は、一般的な選択フィールドを作成したい時に有効です。onChange
をnullに設定することで非活性化させることができます。
複雑なスタイルの変更が必要な場合はContainer()
などのWidgetで囲うとより幅広いスタイルを実現することができます。
Container(decoration: BoxDecoration(color: Colors.white,border: Border.all(color: Colors.black),borderRadius: BorderRadius.circular(10),),child: DropdownButton(underline: const SizedBox(),padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 3),borderRadius: BorderRadius.circular(10),items: [...]),),
DropdownMenu
は選択肢の検索が可能であり、多数の選択肢がある場合に向いています。
選択されたデータを取得するにはTextEditingController()
を使用して対応することができます。
非常に使いやすいWidgetですが、Disableやバリデーションの設定はデフォルトで設定できないため、フォームでの活用は工夫しなければならないWidgetです。
DropdownMenu(label: const Text("Outline"),...inputDecorationTheme: InputDecorationTheme(labelStyle: const TextStyle(color: Colors.blue),enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue[100]!)),focusedBorder: const OutlineInputBorder(borderSide: BorderSide(color: Colors.blue)),),dropdownMenuEntries: const [DropdownMenuEntry(value: "Apple", label: "Apple"),DropdownMenuEntry(value: "Grape", label: "Grape"),DropdownMenuEntry(value: "Lemon", label: "Lemon"),]),
- DropdownButtonFormField
選択されたデータの検証を行うためにはDropdownButtonFormField
を使用して対応することができます。
基本的な使用方法はDropdownButton
とあまり変わりませんが、Form()
で囲みvalidator
を指定することで、自由にエラーメッセージを設定できます。
final _formKey = GlobalKey<FormState>();Form(key: _formKey,child: DropdownButtonFormField(value: selectedValue,validator: (value) {if (value == "Apple") return "Apple is error!";return null;},...),),
さらに詳しく知りたい場合は、以下の公式ドキュメントから参照してください。