Сетка из конструктора
Часть раздела Списки и экраны путешествия по 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.
Задание
ЛегкоКалендарь показывает только первую неделю июня, записанную вручную. Замени 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'),
),
],
),
),
);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Списки и экраны
1Прокручиваемые списки
Список с прокруткойЭлементы спискаНачало и конецНажатие на элемент спискаРазделители между строками6Вкладки, боковые панели и свайпы
Вкладки с панелью навигацииЗаливные значки для открытой вкладкиБоковая панельУдаление свайпомОтмена свайпаПотренируйтесь самостоятельно: Онлайн-компилятор Flutter