ユーザーからの確認を取るためにチェックを入れるCheckbox Widgetはよく使います
AndroidでもiOSでも同様の機能があります
Checkbox
チェックを入れてユーザーの確認を取得するWidgetです
シンプルに□の升にチェックを入れるための
最低限の設定はこのようになります
1 2 3 4 5 6 7 8 9 10 |
bool isChecked = false; ... Checkbox( value: isChecked, onChanged: (bool? value) { setState(() { isChecked = value!; }); }, ); |
- value
- チェックされたどうかの状態
- onChanged
- ボックスをチェックされた時の挙動を受ける
チェックされた状態
value は tristate: null, true, false の3つの状態を持てるとあります
tristateを有効にすると nullの状態、無効を作ることができます
1 2 3 4 5 6 7 8 9 10 11 |
bool? isCheckedTristate = null; ... Checkbox( value: isCheckedTristate, tristate: true, onChanged: (bool? newValue) { setState(() { isCheckedTristate = newValue; }); }, ); |
null -> false -> true -> null … の順番でTristateが表示させることも可能です
null はーの表示になります
false
true
Checkboxには大きさを設定するプロパティがないので
Transform.scale を使うことでできます
1 2 3 4 5 6 7 8 9 10 11 |
Transform.scale( scale: 4.0, child: Checkbox( value: isChecked, onChanged: (bool? value) { setState(() { isChecked = value!; }); }, ), ); |
4倍にしてみました
その他の設定として
枠を丸型:shape
枠の太さ:side
チェックの色:checkColor
背景色:fillColor
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Checkbox( // 枠を角丸にする、10ではこのケースで円形になる shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), // 枠の太さ、0で無し side: const BorderSide(width: 0), // チェックの色 checkColor: Colors.white, // 背景色 fillColor: WidgetStateProperty.resolveWith((states) => Colors.red), ... ), |
円形、枠なし、背景色が赤、チェックマークが白になりました
尚、MaterialStateProperty は(v3.19.0-0.3.pre)以降に非推奨になり
代わりにWidgetStatePropertyを使います
サンプルコード
チェック状態をTextに表示させて、まとめたコードです
main.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
import 'package:flutter/material.dart'; void main() { runApp(const MainApp()); } class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('Checkbox')), body: const Center( child: TestCheckbox(), ), ), ); } } class TestCheckbox extends StatefulWidget { const TestCheckbox({super.key}); @override State<TestCheckbox> createState() => _TestCheckboxState(); } class _TestCheckboxState extends State<TestCheckbox>{ bool isChecked = false; @override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( isChecked? 'Checked' : 'not Checked', style: const TextStyle( fontSize: 20, ), ), const SizedBox(height: 30), Transform.scale( scale: 2.0, child: Checkbox( shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), side: const BorderSide(width: 0), checkColor: Colors.white, fillColor: WidgetStateProperty.resolveWith((states) => Colors.red), value: isChecked, onChanged: (bool? value) { setState(() { isChecked = value!; }); }, ), ), ], ); } } |
実行結果
実行結果です
References;
Checkbox class
CheckboxListTile class
tristate property
Transform class
Transform.scale constructor