個人開発者が勉強がてらまとめているだけのサイトです

モーダルボトムシート Modal Bottom Sheet

画面の下から板がせり上がってきて、選択肢や小さなフォームを出す。外側を押すか下に引くと閉じる。

別名
ボトムシートハーフモーダル下から出るメニューシェアシートBottom Sheet
動き
下から出てくる下に引くと閉じる背景が暗くなる
作り方
標準ウィジェット Flutter に入っているものだけで作れます

本物の Flutter ウィジェットが動きます(初回は数秒かかります)

別タブで大きく開く ↗

どんなもの?

スマホでは指が届きやすい画面下に出るので、ダイアログより押しやすいのが利点です。

showModalBottomSheet を呼ぶだけで、背景の暗転・下スワイプで閉じる・アニメーションが付きます。

showDragHandle: true で上部のつまみ(ドラッグハンドル)も出せます。

Navigator.pop(context, 値) で閉じると、呼び出し元の await に値が返ってきます。

こんなときに

  • 共有先や並び替え方法など、今の画面に対する選択肢を出したい
  • 入力が2〜3項目の小さなフォーム

避けたい場面

  • 長いフォームや画面遷移を伴う内容(フルスクリーンダイアログや新しい画面にする)

最小コード

final picked = await showModalBottomSheet<String>(
  context: context,
  showDragHandle: true,
  builder: (context) => SafeArea(
    child: Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        ListTile(
          leading: const Icon(Icons.link),
          title: const Text('リンクをコピー'),
          onTap: () => Navigator.of(context).pop('copy'),
        ),
      ],
    ),
  ),
);

使うウィジェット

showModalBottomSheet

似ているもの・一緒に見たいもの

触ってみる ↗
ダイアログ・シート ドラッグできるシートDraggable Scrollable Sheet

画面下に出しっぱなしの板を上下に引っ張って高さを変えられる。地図アプリの「近くのお店」一覧のあれ。

ドラッグで高さが変わる
触ってみる ↗
ダイアログ・シート アクションシートAction Sheet

iOS でおなじみの、下から選択肢の束と、離れた「キャンセル」ボタンが出てくるシート。

下から出てくる
触ってみる ↗
メニュー スピードダイヤルSpeed Dial

右下の丸いボタン(FAB)を押すと、関連する小さなボタンが上に積み上がるように出るメニュー。

上に並ぶ