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

マスター/ディテール List-Detail Layout

一覧と詳細の組み合わせ。スマホでは「一覧 → 詳細」と画面を移り、タブレットでは左右に並べて同時に見せる。

別名
リスト詳細2ペイン一覧と詳細分割ビューMaster-DetailTwo PaneSplit View
動き
スマホは画面を移るタブレットは横に並ぶ
作り方
標準ウィジェット Flutter に入っているものだけで作れます

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

別タブで大きく開く ↗

どんなもの?

メール・設定・チャットなど、一覧から1つ選んで中身を見るアプリの基本形です。

画面の幅を LayoutBuilder(または MediaQuery.sizeOf)で調べ、

広ければ Row で一覧と詳細を並べ、狭ければ一覧だけ出して、選んだら詳細の画面へ移ります。

目安として幅 600px 以上で2列にすることが多いです。

デモ上部の切り替えで、同じ作りがスマホとタブレットでどう変わるかを見られます。

こんなときに

  • タブレットや PC でも使われる、一覧から選ぶアプリ

避けたい場面

  • スマホでしか使わない前提のアプリ(作り分けの手間が無駄になる)

最小コード

LayoutBuilder(
  builder: (context, constraints) {
    if (constraints.maxWidth >= 600) {
      return Row(children: [
        SizedBox(width: 320, child: MailList(onTap: select)),
        const VerticalDivider(width: 1),
        Expanded(child: MailDetail(selected)),
      ]);
    }
    // 狭い画面: 一覧だけ出し、選んだら詳細の画面へ
    return MailList(
      onTap: (mail) => Navigator.of(context).push(
        MaterialPageRoute(builder: (_) => MailDetail(mail)),
      ),
    );
  },
)

使うウィジェット

LayoutBuilderRowVerticalDivider

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