Menu
CoddyTech

Сетка из конструктора

Часть раздела Списки и экраны путешествия по Flutter на Coddy. Урок 11 из 33.

Сетка из ста фотографий сталкивается с той же проблемой, что и длинный список: нельзя написать плитку для каждого элемента, а создавать их все сразу медленно. GridView.builder создает плитки по мере прокрутки, как и ListView.builder:

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

Длинное название SliverGridDelegateWithFixedCrossAxisCount обозначает разметку сетки: фиксированное количество плиток в каждой строке. Оно принимает crossAxisCount и интервал между плитками, которые напрямую принимал GridView.count.

itemCount и itemBuilder работают так же, как и в списке: функция-сборщик получает index каждой плитки, начиная с 0.

challenge icon

Задание

Легко

Календарь показывает только первую неделю июня, записанную вручную. Замени GridView.count на GridView.builder, чтобы отображались все 30 дней, пронумерованные от 1, по семь в строке.

Попробуйте сами

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