技術的備忘録

基本自分用備忘録

Flutter Widget ListView

ListView

  • スクロール可能なウィジェットのリスト
  • ListView.builderを使用して作成することで、動的なリストが作成できる
  • ListView.separatedを使用して作成することで、リストの要素の間に区切りを設定することができる api.flutter.dev

普通のListView

  • ListViewに表示される可能性のあるすべての子要素に対して処理を行うため、子要素の数が少ないリストに適している
  • 子要素の数が変更される場合があるなら、ListView.builderを使ったほうがいい

  • 公式サンプルコード

ListView(
  padding: const EdgeInsets.all(8),
  children: <Widget>[
    Container(
      height: 50,
      color: Colors.amber[600],
      child: const Center(child: Text('Entry A')),
    ),
    Container(
      height: 50,
      color: Colors.amber[500],
      child: const Center(child: Text('Entry B')),
    ),
    Container(
      height: 50,
      color: Colors.amber[100],
      child: const Center(child: Text('Entry C')),
    ),
  ],
)

ListView.builder

  • 表示する子要素を事前に用意しておく必要がないので、多くの子要素を持つリストや、動的なリストの表示に使用する
  • itemBuilderには、非Nullのウィジェットを設定し、ウィジェットインスタンスを返すようにする。
  • 子要素の並び替えはサポートしていないので、後から子要素の順番を変更する場合は、ListViewやListView.customを使用したほうがいいらしい
  • itemBuilderの指定は必須

  • 公式サンプルコード

final List<String> entries = <String>['A', 'B', 'C'];
final List<int> colorCodes = <int>[600, 500, 100];

ListView.builder(
  padding: const EdgeInsets.all(8),
  itemCount: entries.length,
  itemBuilder: (BuildContext context, int index) {
    return Container(
      height: 50,
      color: Colors.amber[colorCodes[index]],
      child: Center(child: Text('Entry ${entries[index]}')),
    );
  }
);