✉️
【Flutter】FloatingActionButtonのサイズ(normal/extended) をいい感じに切り替える
デモ・コード
タイトルに若干語弊がありますが、FloatingActionButton.extended
のサイズを通常時に近い形にする・元に戻すという実装になっています。
GmailのFABがこんな感じになっています
参考サイト
こちらの回答をほぼそのまま使いました。(他の方法ではうまくいきませんでした)
改善点
そのままだと通常時のFABが円形ではなくなってしまっている(若干横長になってしまっている)が、現状の解決策は以下の2点。
-
SizedBox
でラップして、height
をwidth
に合わせる -
Icon
のsize
を小さくして、width
をheight
に合わせる
SizedBox
でラップして、height
をwidth
に合わせる
FloatingActionButton.extended
のコードを見てみると、以下のようにlabel
の左右に20px
のスペースが設けられていることがわかった。
紛らわしいが、今回は
FloatingActionButton.extended
のicon
プロパティは使用せずlabel
に直接Icon
を指定しているので、icon == null
は常に真となる。
floating_action_button.dart
child = _ChildOverflowBox(
child: Row(
mainAxisSize: MainAxisSize.min,
children: icon == null
? <Widget>[
const SizedBox(width: 20.0), // <= スペース
label,
const SizedBox(width: 20.0), // <= スペース
]
: !isExtended ? <Widget>[
const SizedBox(width: 20.0),
icon,
const SizedBox(width: 20.0),
] : <Widget>[
const SizedBox(width: 16.0),
icon,
const SizedBox(width: 8.0),
label,
const SizedBox(width: 20.0),
],
),
),
Icon
のデフォルトサイズは24
なので横幅は20+24+20=64
であることがわかり、FloatingActionButton.extended
をSizedBox
でラップしheight
を64
に指定することで通常のFABのように円として表示することができる。
Widget _buildFabWithAnimation() {
return SizedBox(
height: 64,
child: FloatingActionButton.extended(
onPressed: () {},
label: AnimatedSwitcher(
~~
Iconサイズ
Iconのサイズを小さくする
FloatingActionButton.extended
のheight
は48
に設定されているので、Icon
のサイズを8
にすれば通常のFABのように円として表示することができる。
しかし、それだとIconが見づらくなってしまうので基本的には上の方法のほうが良さそう。
また、上記の方法と組み合わせることでFABのデフォルトサイズである56pxで表示することもできる。
floating_action_button.dart
const BoxConstraints _kExtendedSizeConstraints = BoxConstraints(
minHeight: 48.0,
maxHeight: 48.0,
);
Discussion