ボタン
マテリアルデザインにおいて、基本的なボタンに以下の4種類があります。
- テキストボタン(TextButton)
- アウトラインボタン(OutlinedButton)
- 立体ボタン(ElevatedButton)
- トグルボタン(ToggledButton)
これらのボタンの違いを示したものが図1です。テキストボタン、アウトラインボタン、立体ボタンは装飾の違いであり、それ以外は大きく違いはありません。また、トグルボタンは複数のボタンを1つにしたもので、ON/OFFのステータスがある部分が異なります。
テキストボタン(TextButton)
テキストボタンは、テキストを基本としたシンプルなボタンです。以前のFlutterではFlatButtonというボタンがありましたが、現在は、TextButtonを利用することが推奨されています。
リスト1はテキストボタンを使ったサンプルコードで実行結果が図2です。
// (1) 基本的な使い方
TextButton(
onPressed: (){
print("button press !!");
},
child: Text('OK')
),
// (2) 不活性のボタン
TextButton(
onPressed: null,
child: Text('Disabled Button'),
),
// (3) スタイルの変更
TextButton(
style: TextButton.styleFrom(
primary: Colors.red,
),
onPressed: (){},
child: Text('登録する'),
),
// (4) アイコンをボタンに追加する
TextButton.icon(
icon: Icon(Icons.add),
onPressed: (){},
label: Text('登録する')
)
(1)がもっともシンプルな記述例です。onPressedメソッドは必ず定義しなければならず、(2)のようにnullを指定すると不活性状態のボタンになります。ボタンのスタイルを変更する場合にはstyleFromを使うことでTextButtonにあったスタイルの変更が可能です。(3)では、文字の色を指定しています。そして、アイコンを利用するには(4)のようにTextButtonのiconコンストラクタを利用します。
アウトラインボタン(OutlinedButton)
アウトラインボタンは、ボーダー付きボタンです。以前のFlutterではOutlineButtonというボタンがありましたが、現在は、OutlinedButtonを利用することが推奨されています。
リスト2はテキストボタンを使ったサンプルコードで実行結果が図3です。実際のコードはTextButtonとほぼ同様です。
// (1) 基本的な使い方
OutlinedButton(
onPressed: (){
print("button press !!");
},
child: Text('OK')
),
// (2) 不活性のボタン
OutlinedButton(
onPressed: null,
child: Text('Disabled Button'),
),
// (3) 装飾の変更
OutlinedButton(
style: OutlinedButton.styleFrom(
primary: Colors.red,
side: BorderSide(
color: Colors.red,
)
),
onPressed: (){},
child: Text('登録する')
),
// (4) アイコンをボタンに追加する
OutlinedButton.icon(
onPressed: (){},
icon: Icon(Icons.add),
label: Text('登録する')
)
(1)がもっともシンプルな記述例です。(2)のようにnullを指定すると不活性状態のボタンになります。ボタンのスタイルを変更する場合にはstyleFromを使うことでOutlinedButtonにあったスタイルの変更が可能です。
(3)では、文字の色とボーダーの色を指定しています。そして、アイコンを利用するには(4)のようにOutlinedButtonのiconコンストラクタを利用します。
立体ボタン(ElevatedButton)
立体ボタンは、立体的な効果を持ったボタンを作るためのウィジェットです。以前のFlutterではRaisedButtonというボタンがありましたが、現在は、ElevatedButtonを利用することが推奨されています。リスト3がサンプルコードと実行結果が図4です。
// 基本的な使い方
ElevatedButton(
onPressed: (){
print("button press !!");
},
child: Text('OK')
),
// 不活性のボタン
ElevatedButton(
onPressed: null,
child: Text('Disabled Button'),
),
// 装飾の変更
ElevatedButton(
style: ElevatedButton.styleFrom(
// (1) 背景色を指定
primary: Colors.red,
// (2) 影のサイズ
elevation: 10,
// (3) 角を丸くする
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(30.0),
)
),
onPressed: (){},
child: Text('登録する')
),
// アイコンをボタンに追加する
ElevatedButton.icon(
onPressed: (){},
icon: Icon(Icons.add),
label: Text('追加する')
)
ElevatedButtonもTextButtonやOutlinedButtonとほぼ同様に利用することが可能です。また、ボタンのスタイルを変更する場合にはstyleFromを使うことでElevatedButtonにあったスタイルに変更できます。
(1)で背景色を指定しています。そして、(2)elevationはボタンの浮きの高さのようなものであり、この値を大きくすると影が大きくなり、ゼロにすると影がなくなります。また、角を丸くする場合には(3)のようにshapeで指定可能です。
トグルボタン(ToggledButton)
トグルボタンは、ボタンをグループ化して利用する場合のボタンです。また、単純なグループ化だけではなく、利用の可否を指定できます。リスト4がサンプルコードと実行結果が図5です。
// (1) ON/OFFの初期値定義 final isSelected =[true, false, false]; return ToggleButtons( // (2) ON/OFFの指定 isSelected: isSelected, // (3) ボタンが押されたときの処理 onPressed: (index){}, // (4) 各ボタン表示の子ウィジェットの指定 children: [ Padding( padding: EdgeInsets.all(10.0), child: Text('Button 1'), ), Padding( padding: EdgeInsets.all(10.0), child: Text('Button 2'), ), Padding( padding: EdgeInsets.all(10.0), child: Text('Button 3'), ), ], );
ToggleButtonsは指定する各ボタンのON/OFFの状態を維持するので(1)のように初期状態を定義しています。そして、(2)のようにisSelectedに指定します。ボタンが押された場合には、(3)のonPressedで指定するメソッドが実行されます。このときに引数であるindexにはボタン配列の番号が設定されます。
そして、実際に表示されるボタンには(4)のchildrenに指定します。このときにボタンの数とisSelectedで指定した配列数、つまり(1)と(4)の配列数は必ず同じにする必要があります。ToggleButtonsのスタイルも変更することが可能で、図6のように変更したコード例がリスト5です。
return ToggleButtons( //(省略) // (1) 枠の変更 borderWidth: 2, borderColor: Colors.amber, // (2) 角マルにする borderRadius: BorderRadius.circular(5.0), // (3) 状態がONのボタンの文字色と枠の色 selectedColor: Colors.white, selectedBorderColor: Colors.black54, // (4) 状態がONのボタンの背景色 fillColor: Colors.red, //(省略) )
枠の太さと色を変更する場合には(1)のようにborderWidthとborderColorを指定します。また、全体の枠の角を丸くするには(2)のようにborderRadiusを指定します。そして、状態がONのボタンの文字色は(3)のようにselectedColorで指定し、枠の色を指定するにはselectedBorderColorを指定します。さらに、背景色を変更するには(4)のようにfillColorで指定可能です。
