Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Tippe 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 Parameter required this.planet hinzu
  • Zeige planet.name in der App-Leiste und Mars 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});
}
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Flutter-Compiler