Envie dados para uma tela
Parte da seção Listas e telas do Journey de Flutter da Coddy. Lição 21 de 33.
Uma tela de detalhes mostra um item, aquele em que você tocou. A tela é um widget, então recebe seus dados da mesma forma que qualquer widget: por meio do construtor.
class PlanetScreen extends StatelessWidget {
const PlanetScreen({super.key, required this.planet});
final Planet planet;
...
}A tela mantém o planeta em um campo final e o lê em build: Text(planet.name). super.key é a chave que todo widget pode receber; mantenha-a primeiro.
Onde você navega para a tela, passe o planeta da linha em que tocou:
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PlanetScreen(planet: planet)),
);
},Agora, uma única classe de tela pode exibir qualquer planeta. A lista decide qual deles.
Desafio
MédioToque em qualquer planeta: a tela sempre mostra Mercury. Faça com que PlanetScreen mostre o planeta que foi tocado:
- adicione a ela um campo
final Planet planet;e um parâmetrorequired this.planet - mostre
planet.namena barra do app eMars has 2 moonsno meio (com o nome do planeta e o número de luas) - passe o
planettocado ao navegar para essa tela
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 const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
final List<Planet> planets = const [
Planet(name: 'Mercury', moons: 0),
Planet(name: 'Venus', moons: 0),
Planet(name: 'Earth', moons: 1),
Planet(name: 'Mars', moons: 2),
Planet(name: 'Jupiter', moons: 95),
Planet(name: 'Saturn', moons: 146),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Planets')),
body: ListView(
children: [
for (Planet planet in planets)
ListTile(
title: Text(planet.name),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const PlanetScreen()),
);
},
),
],
),
);
}
}
class PlanetScreen extends StatelessWidget {
const PlanetScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Mercury')),
body: const Center(
child: Text('Mercury has 0 moons'),
),
);
}
}
class Planet {
final String name;
final int moons;
const Planet({required this.name, required this.moons});
}
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
1Listas roláveis
Uma lista que rolaItens da listaInício e fimToque em um item da listaDivisórias entre linhas5Mais de uma tela
Abra uma nova telaA seta VoltarVolte com um botãoEnvie dados para uma telaReceba um resultado de voltaPratique por conta própria: Compilador de Flutter online