Menu
CoddyTech

Bir Ekrana Veri Gönder

Coddy'nin Flutter Journey'sinin Listeler ve Ekranlar bölümünün bir parçası. Ders 21 / 33.

Bir ayrıntı ekranı tek bir öğeyi, dokunduğun öğeyi gösterir. Ekran bir araç takımıdır, bu yüzden verisini her araç takımının aldığı şekilde alır: oluşturucusu aracılığıyla.

class PlanetScreen extends StatelessWidget {
  const PlanetScreen({super.key, required this.planet});

  final Planet planet;
  ...
}

Ekran, gezegeni bir final alanında tutar ve onu build içinde okur: Text(planet.name). super.key, her araç takımının alabileceği anahtardır; onu ilk sırada tut.

Ekranı yönlendirdiğin yerde, dokunulan satırın gezegenini ilet:

onTap: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => PlanetScreen(planet: planet)),
  );
},

Artık tek bir ekran sınıfı herhangi bir gezegeni gösterir. Hangisini göstereceğine liste karar verir.

challenge icon

Görev

Orta

Herhangi bir gezegene dokun: ekran her zaman Mercury yazar. PlanetScreen ekranının dokunulan gezegeni göstermesini sağla:

  • ona bir final Planet planet; alanı ve required this.planet parametresi ekle
  • uygulama çubuğunda planet.name değerini, ortada ise (gezegenin adı ve uydu sayısıyla birlikte) Mars has 2 moons metnini göster
  • ekranı açarken dokunulan planet değerini geçir

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Listeler ve Ekranlar bölümündeki tüm dersler

Kendi başına pratik yap: Online Flutter derleyicisi