Flutter

Flutter ListView.builderの使い方|大量リストを効率よく表示する基本

FlutterのListView.builderを初心者向けに解説します。itemCount、itemBuilder、ListTile、動的リスト表示、通常のListViewとの違いを整理します。

この記事の目次
  1. この記事の結論
  2. 最小コード
  3. itemCountとitemBuilderの役割
  4. カード風に表示する
  5. APIデータに置き換える考え方
  6. 実装後に確認すること
  7. よくあるつまずき
  8. 次に読む記事
  9. まとめ

ListView.builderは、項目数が多いリストを効率よく表示するためのWidgetです。画面に必要な分だけ項目を作るため、API結果や商品一覧、記事一覧の表示に向いています。

この記事の結論

固定の少数リストならListViewのchildren、大量または可変データならListView.builderを使います。まずはitemCountとitemBuilderの役割を覚えましょう。

最小コード

final items = List.generate(20, (index) => "Item $index");

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text(items[index]),
    );
  },
)

itemCountとitemBuilderの役割

  • itemCount:何件表示するか
  • itemBuilder:indexごとにどのWidgetを作るか
  • index:0から始まる番号
  • ListTile:リスト1行の基本Widget

カード風に表示する

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    return Card(
      child: ListTile(
        leading: CircleAvatar(child: Text("${index + 1}")),
        title: Text(items[index]),
        subtitle: const Text("説明文"),
      ),
    );
  },
)

APIデータに置き換える考え方

最初はList<String>で確認し、次にList<Map>やModelクラスへ置き換えます。API取得、ローディング、エラー表示は別の記事で扱うと分かりやすくなります。

実装後に確認すること

  • itemCountがデータ件数と一致しているか
  • indexで範囲外アクセスしていないか
  • 大量リストなのにchildrenへ全部書いていないか
  • 読み込み中や空状態を別途用意しているか

よくあるつまずき

  • itemCountを書かずに意図しない件数になる
  • index + 1とindexを混同する
  • ListViewをColumnの中に直接置いて高さエラーにする
  • API取得処理をitemBuilder内で実行する

次に読む記事

まとめ

ListView.builderは、可変件数や大量リストを扱うFlutterアプリの基本です。itemCount、itemBuilder、ListTileを理解し、APIや検索機能へ発展させましょう。