Daten an einen Bildschirm senden
Teil des Abschnitts Listen und Bildschirme der Flutter-Journey von Coddy. Lektion 21 von 33.
Ein Detailbildschirm zeigt ein Element: das Element, auf das du getippt hast. Der Bildschirm ist ein Widget und erhält seine Daten daher wie jedes Widget über seinen Konstruktor.
class PlanetScreen extends StatelessWidget {
const PlanetScreen({super.key, required this.planet});
final Planet planet;
...
}Der Bildschirm speichert den Planeten in einem final-Feld und liest ihn in build aus: Text(planet.name). super.key ist der Schlüssel, den jedes Widget übernehmen kann; lass ihn an erster Stelle.
Wenn du den Bildschirm öffnest, übergib den Planeten der angetippten Zeile:
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PlanetScreen(planet: planet)),
);
},Eine Bildschirmklasse zeigt nun jeden Planeten an. Die Liste entscheidet, welchen.
Aufgabe
MittelTippe auf einen beliebigen Planeten: Auf dem Bildschirm steht immer Mercury. Sorge dafür, dass PlanetScreen den Planeten anzeigt, auf den getippt wurde:
- Füge ein Feld
final Planet planet;und einen Parameterrequired this.planethinzu - Zeige
planet.namein der App-Leiste undMars has 2 moons(mit dem Namen und der Anzahl der Monde des Planeten) in der Mitte an - Übergib den angetippten
planet, wenn du ihn aufrufst
Probier es selbst
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});
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Listen und Bildschirme
1Scrollbare Listen
Eine scrollbare ListeListenelementeVorne und hintenEin Listenelement antippenTrennlinien zwischen Zeilen5Mehr als ein Bildschirm
Einen neuen Bildschirm öffnenDer Zurück-PfeilMit einer Schaltfläche zurückgehenDaten an einen Bildschirm sendenEin Ergebnis zurückerhaltenÜbe selbstständig: Online-Flutter-Compiler