Menu
CoddyTech

ビルダーで作るグリッド

CoddyのFlutterジャーニー「リストと画面」セクションの一部。レッスン 11/33。

100枚の写真を並べたグリッドも、長いリストと同じ問題があります。すべてのタイルを記述することはできず、一度にすべてを作成すると時間がかかります。GridView.builderは、ListView.builderと同じように、画面内にスクロールして入ってきたタイルを作成します。

GridView.builder(
  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
  ),
  itemCount: photos.length,
  itemBuilder: (context, index) {
    return Image.network(photos[index]);
  },
)

SliverGridDelegateWithFixedCrossAxisCountという長い名前は、グリッドのレイアウトを表します。各行のタイル数を固定するものです。これは、GridView.countに直接渡していたcrossAxisCountと間隔を受け取ります。

itemCountとitemBuilderはリストの場合と同じように動作します。ビルダーには、0から始まる各タイルのindexが渡されます。

challenge icon

チャレンジ

簡単

カレンダーには、手書きで記入された6月の最初の週だけが表示されています。GridView.countを、30日すべてを表示し、1から番号を付けて1行に7日ずつ並べるGridView.builderに置き換えてください。

自分で試してみよう

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(title: const Text('June')),
        body: GridView.count(
          padding: const EdgeInsets.all(8),
          crossAxisCount: 7,
          mainAxisSpacing: 4,
          crossAxisSpacing: 4,
          children: [
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('1'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('2'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('3'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('4'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('5'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('6'),
            ),
            Container(
              alignment: Alignment.center,
              color: Colors.teal.shade100,
              child: const Text('7'),
            ),
          ],
        ),
      ),
    );
  }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

リストと画面のすべてのレッスン

自分で練習してみよう: Flutterオンラインコンパイラ