CodeBlanks Logo Icon CodeBlanks

Özet - Navigator

push ve pop'u birleştirerek iki ekranlı akış yaparsın.

İki ekranlı akış

İki ekranlı bir akış yapmak için Navigator.push ile ikinci ekranı açar, Navigator.pop ile geri dönersin. Push, MaterialPageRoute'ın builder'ı ile yeni ekranı oluşturur. Pop, üstteki ekranı kapatıp alttaki ekrana döner.

// Birinci ekranda
Navigator.push(context,
  MaterialPageRoute(builder: (_) => IkinciEkran()));

// İkinci ekranda
Navigator.pop(context);

Uygulama İki ekranlı akış yap

akisBaslat adında bir fonksiyon yaz; çağrılınca Iki ekranli akis yazdırsın. IkinciEkran adında bir StatelessWidget yaz; içinde Navigator.pop(context) çağıran bir ElevatedButton olsun. main içinde akisBaslat'ı çağır. Birinci ekranda Navigator.push ile IkinciEkran'ı aç.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';

// akisBaslat fonksiyonu yaz: "Iki ekranli akis" yazdirsin
// IkinciEkran adinda bir StatelessWidget yaz

void main() {
  // akisBaslat'i cagir
  runApp(const Uygulama());
}

class Uygulama extends StatelessWidget {
  const Uygulama({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          // ElevatedButton ekle
          child: SizedBox(),
        ),
      ),
    );
  }
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';

void akisBaslat() {
  print('Iki ekranli akis');
}

class IkinciEkran extends StatelessWidget {
  const IkinciEkran({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Geri'),
        ),
      ),
    );
  }
}

void main() {
  akisBaslat();
  runApp(const Uygulama());
}

class Uygulama extends StatelessWidget {
  const Uygulama({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => const IkinciEkran()),
              );
            },
            child: Text('Ac'),
          ),
        ),
      ),
    );
  }
}

Beklenen çıktı

Iki ekranli akis

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İki ekranlı akış için hangi metodlar bir arada kullanılır?

  • push ve push
  • push ve pop Doğru cevap
  • pop ve pop
  • create ve destroy

Açıklama: İki ekranlı akışta push yeni ekranı açar, pop geri döner; push+push, pop+pop veya create+destroy bu amaca yönelik değildir.

2 MaterialPageRoute'ı ekle

Soru
Navigator.push(
  context,
  ____(builder: (_) => const IkinciEkran()),
);
Cevap
Navigator.push(
  context,
  MaterialPageRoute(builder: (_) => const IkinciEkran()),
);

Açıklama: Material geçiş rotası oluşturmak için MaterialPageRoute sınıfı kullanılır; WidgetRoute, ScreenRoute veya AppRoute diye sınıf yoktur.

3 Navigator özeti

Kavram Anlamı
Navigator Ekran akışını yönetir
push Yeni rota ekler
pop Üstteki rotayı çıkarır
MaterialPageRoute Material geçişi sağlar

Başlangıç bölümündeki tüm dersler