【Flutter】ボタンウィジェット
ボタンの種類
Flutter には以下の 3 種類のボタンウィジェットがあります。 プロパティなどは同じで、ボタンの見た目が異なります。
ウィジェット | 影 | 外線 |
---|---|---|
TextButton | - | - |
ElevatedButton | ● | - |
OutlinedButton | - | ● |
TextButton(
child: Text('TextButton'),
onPressed: () => print('clicked!'),
)
ElevatedButton(
child: Text('ElevatedButton'),
onPressed: () => print('clicked!'),
)
OutlinedButton(
child: Text('OutlinedButton'),
onPressed: () => print('clicked!'),
)
ボタンウィジェットでは、child
とonPressed
が必須のプロパティとなります。
child
には、テキストやアイコンなどを設定します。
onPressed
は、ボタンを押した場合の処理を設定します。
以下のようにnull
を設定すると、disabled となり、ボタンの見た目も変わります。
TextButton(
child: Text('TextButton'),
onPressed: null,
)
ボタンのスタイル
ボタンのスタイルはstyle
プロパティに、各ボタンウィジェットのstyleFrom()
メソッドを使用します。
TextButton(
child: Text('TextButton'),
onPressed: () => print('clicked!'),
style: TextButton.styleFrom(
//...
),
)
色
ボタンの色はprimary
プロパティを設定します。
TextButton
とOutlinedButton
では、テキストとアイコンの色、ホバー、フォーカス、押された際のアニメーションの色が設定されます。
TextButton(
child: Text('TextButton'),
onPressed: () => print('clicked!'),
style: TextButton.styleFrom(
primary: Colors.red,
),
)
ElevatedButton
では、primary
プロパティでにより背景色が設定できます。
テキストなどの色は、onPrimary
プロパティで設定します。
ElevatedButton(
child: Text('ElevatedButton'),
onPressed: () => print('clicked!'),
style: TextButton.styleFrom(
primary: Colors.red,
onPrimary: Colors.yellow,
shadowColor: Colors.yellow,
),
)
また disabled 時の色をonSurface
プロパティにより設定できます。
TextButton(
child: Text('TextButton'),
onPressed: null,
style: TextButton.styleFrom(
onSurface: Colors.red
),
)
影
ElevatedButton
では、shadowColor
で影の色を、elevation
で影の大きさを設定します。
ElevatedButton(
child: Text('ElevatedButton'),
onPressed: () => print('clicked!'),
style: TextButton.styleFrom(
shadowColor: Colors.red,
elevation: 5.0,
),
)
サイズ・位置
ボタンの大きさはfixedSize
またはminimamSize
プロパティで設定します。
fixedSize
は固定値、minimamSize
は最小値を設定します。
またalignment
によって子ウィジェットの位置を設定でき、padding
によって中の余白を設定できます。
TextButton(
child: Text('TextButton'),
onPressed: () => print('clicked!'),
style: TextButton.styleFrom(
fixedSize: Size(100, 100),
alignment: Alignment.topLeft,
padding: EdgeInsets.all(10),
),
)
線
線の色や太さは、side
プロパティで設定します。
OutlinedButton(
child: Text('OutlinedButton'),
onPressed: () => print('clicked!'),
side: BorderSide(
color: Colors.red,
width: 3.0,
),
)
形状
ボタンの形状は、shape
プロパティ以下のクラスを設定することで変化させることができます。
BeveledRectangleBorder
shape: BeveledRectangleBorder( borderRadius: BorderRadius.circular(10), ),
CircleBorder
shape: CircleBorder(),
ContinuousRectangleBorder
shape: ContinuousRectangleBorder( borderRadius: BorderRadius.circular(10), ),
RoundedRectangleBorder
shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ),
StadiumBorder
shape: StadiumBorder(),
アイコン
アイコンを使用する場合は、icon()
を使用します。
child
プロパティの代わりに、label
プロパティにテキストを、icon
プロパティにアイコンを設定します。
TextButton.icon(
label: Text('TextButton'),
icon: Icon(Icons.favorite),
onPressed: () => print('clicked!'),
)