Uma grade criada com um construtor
Parte da seção Listas e telas do Journey de Flutter da Coddy. Lição 11 de 33.
Uma grade com cem fotos tem o mesmo problema que uma lista longa: você não pode escrever cada bloco, e criar todos de uma vez é lento. GridView.builder cria os blocos à medida que eles aparecem durante a rolagem, assim como ListView.builder:
GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
),
itemCount: photos.length,
itemBuilder: (context, index) {
return Image.network(photos[index]);
},
)O nome longo, SliverGridDelegateWithFixedCrossAxisCount, define o layout da grade: um número fixo de blocos por linha. Ele recebe o crossAxisCount e o espaçamento que GridView.count recebia diretamente.
itemCount e itemBuilder funcionam da mesma forma que em uma lista: o construtor recebe o index de cada bloco, começando em 0.
Desafio
FácilO calendário mostra apenas a primeira semana de junho, escrita à mão. Substitua o GridView.count por um GridView.builder que mostre todos os 30 dias, numerados de 1, sete por linha.
Experimente você mesmo
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'),
),
],
),
),
);
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Listas e telas
Pratique por conta própria: Compilador de Flutter online