Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

O 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'),
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconTeste seus conhecimentos

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