Enviar datos a una pantalla
Parte de la sección Listas y pantallas del Journey de Flutter de Coddy. Lección 21 de 33.
Una pantalla de detalles muestra un elemento: el que tocaste. La pantalla es un widget, así que obtiene sus datos como cualquier otro widget: mediante su constructor.
class PlanetScreen extends StatelessWidget {
const PlanetScreen({super.key, required this.planet});
final Planet planet;
...
}La pantalla guarda el planeta en un campo final y lo lee en build: Text(planet.name). super.key es la clave que puede recibir cualquier widget; mantenla al principio.
Cuando insertes la pantalla, pasa el planeta de la fila que se tocó:
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PlanetScreen(planet: planet)),
);
},Ahora una sola clase de pantalla muestra cualquier planeta. La lista decide cuál.
Desafío
IntermedioToca cualquier planeta: la pantalla siempre muestra Mercury. Haz que PlanetScreen muestre el planeta que se tocó:
- dale un campo
final Planet planet;y un parámetrorequired this.planet - muestra
planet.nameen su barra de la aplicación yMars has 2 moons(con el nombre del planeta y sus lunas) en el centro - pasa el
planettocado al abrirlo
Pruébalo tú mismo
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Listas y pantallas
1Listas con desplazamiento
Una lista desplazableElementos de listaAl principio y al finalToca un elemento de listaSeparadores entre filas5Más de una pantalla
Abrir una nueva pantallaLa flecha de retrocesoVolver con un botónEnviar datos a una pantallaRecibir un resultado3Tarjetas y cuadrículas
Tarjetas en una listaUna cuadrícula de mosaicosUna cuadrícula creada con un constructor6Pestañas, cajones y deslizamientos
Pestañas con una barra de navegaciónIconos rellenos para la pestaña abiertaUn cajón lateralDeslizar para eliminarDeshacer un deslizamientoPractica por tu cuenta: Compilador de Flutter online