Navigator: nedir, Flutter'da ekran yönetimi

Yazar: IT Sectr Yayınlanma: 2026-07-02 Okuma süresi: 9 dk

Navigator, Flutter'da push, pop, pushReplacement ve pushNamed yöntemleriyle ekranlar arasında geçiş yapmak için Route nesnelerinden oluşan bir yığını yöneten bir navigasyon yöneticisi widget'ıdır. State aracılığıyla doğrudan widget değiştirmenin aksine, Navigator tam ekranlar düzeyinde çalışır: geçiş geçmişini depolar ve platforma özgü animasyonları destekler. Flutter API Referansı'na (2026) göre, Navigator 2.0 (Router), derin bağlantılar ve uyarlanabilir tasarım içeren karmaşık senaryolar için bildirimsel navigasyon yönetimi sağlar. Tipik bir uygulamada Navigator, Android'de Geri düğmesinin ve iOS'ta kaydırma hareketlerinin doğru davranışını garanti eder.

Önemli Noktalar

  • Navigator — push, pop, pushNamed, pushReplacement ve pushAndRemoveUntil yöntemleriyle rota yığınını kontrol eden bir navigasyon yöneticisi
  • Rota yığını — Navigator ekranları LIFO yığınında saklar: her push üste bir ekran ekler, pop en üsttekini kaldırır
  • pushNamed — MaterialApp.routes veya onGenerateRoute'da tanımlanan adlandırılmış rotalarla navigasyon
  • pushReplacement — geçerli ekranı geri dönme imkanı olmadan yenisiyle değiştirir (örneğin, giriş yaptıktan sonra)
  • Navigator 2.0 — web ve masaüstü navigasyonu için Router, RouterDelegate ve RouteInformationParser ile bildirimsel API

Flutter'da Navigator Nedir

Navigator, Route nesnelerinden oluşan bir yığını yöneten ve Flutter uygulamasında ekran navigasyonunu uygulayan bir widget'tır. Her push çağrısı, yığının en üstüne yeni bir Route koyar, pop en üstteki Route'u kaldırır ve önceki ekrana döner. MaterialApp, tüm uygulama için otomatik olarak bir Navigator oluşturur ve Navigator.of(context) aracılığıyla erişilebilir hale getirir.

StatefulWidget'ın aksine, içerik değiştirme tek bir widget içinde setState aracılığıyla gerçekleşirken, Navigator kendi yaşam döngüsüne sahip tam ekranlarla çalışır. Yığındaki her Route, kendi BuildContext'ine sahip izole bir durumdur, bu da bellek sızıntılarını önler ve bağımlılık yönetimini basitleştirir. Pop çağrıldığında, kullanılmayan Route yok edilir ve kaynaklar serbest bırakılır.

Flutter Navigasyon Kılavuzu'na (2026) göre, Navigator emir kipi API'den (Navigator 1.0) bildirimsel API'ye (Navigator 2.0) evrilmiştir. Navigator 1.0, push/pop yöntemlerini doğrudan kullanır ve basit senaryolar için uygundur. Navigator 2.0 (Router), derin bağlantılar, uyarlanabilir navigasyon ve web yönlendirmesi olan uygulamalar için uygundur.

Navigator'ün perde arkasında nasıl çalıştığı

Dahili olarak, Navigator Overlay'i kullanır — Routes'ları üst üste görüntüleyen özel bir widget. Her Route, yığındaki derinliğine karşılık gelen bir z-index ile Overlay'de kendi konumunu oluşturur. Bu, push çağrıldığında yeni ekranın neden önceki ekranın üzerinde animasyon gösterdiğini ve pop çağrıldığında önceki ekranın neden görüntülenmeye hazır olduğunu açıklar: önceki ekran yok edilmedi, yeni ekranın altındaki Overlay'de kaldı.

Geçiş animasyonları için Navigator, ThemeData'da geçersiz kılınabilen PageTransitionsTheme'i kullanır. Platforma özgü animasyonlar, iOS için CupertinoPageRoute (sağdan kaydır) ve Android için MaterialPageRoute (aşağıdan kaydır) aracılığıyla ayarlanır. PlatformRoute kullanılırken Navigator otomatik olarak doğru animasyonu seçer.

Navigator, Route yığınını yönetmek için bir dizi yöntem sağlar. Her yöntem, basit bir geçişten ekran geçmişinin tamamen değiştirilmesine kadar belirli bir navigasyon görevini çözer. Kullanım örnekleriyle ana yöntemleri inceleyelim.

YöntemAçıklamaKullanım Senaryosu
pushYığının en üstüne Route eklerGeri dönme imkanıyla yeni ekrana gitme
popYığından en üstteki Route'u kaldırırÖnceki ekrana dönme
pushReplacementGeçerli Route'u yenisiyle değiştirirGiriş yaptıktan sonra — giriş ekranı ana ekranla değiştirilir
pushAndRemoveUntilRoute ekler ve bir koşula kadar öncekileri kaldırırGeçmişi temizleyerek ana ekrana gitme
popUntilBir koşula ulaşana kadar yığından Route'ları kaldırırGeçmişte belirli bir ekrana dönme
maybePopYalnızca yığın >1 Route içeriyorsa pop'u çağırırYanlışlıkla Geri basıldığında uygulamanın kapanmasını önleme

Push ve Pop: temel işlemler

push yöntemi bir Route alır ve pop sırasında iletilen sonuçla bir Future döndürür. Bu, gidilen ekrandan veri alınmasını sağlar. Örneğin, bir tarih seçici ekranı, Navigator.pop(context, selectedDate) aracılığıyla bir DateTime döndürebilir. pop yöntemi argümansız null döndürür, argümanlı olarak çağıran ekrana değer iletir.

PushReplacement: ekran değiştirme

pushReplacement, geçerli Route'u yenisiyle değiştirir ve mevcut route'u yığından kaldırır. Bu, kullanıcının önceki ekrana dönmemesi gereken senaryolar için kritiktir. Tipik bir örnek — giriş ekranı: başarılı girişten sonra, geçerli ekran ana ekranla değiştirilir ve Geri düğmesi giriş formuna dönmez.

Adlandırılmış Rotalar ve onGenerateRoute

Navigator, pushNamed yöntemi aracılığıyla adlandırılmış rotalarla navigasyonu destekler. Doğrudan bir Route oluşturmak yerine, geliştirici bir dize tanımlayıcısı belirtir ve Navigator, MaterialApp'deki yapılandırmaya göre Route'u otomatik olarak oluşturur. Bu, kodu basitleştirir ve rota tanımını tek bir yerde merkezileştirir.

Adlandırılmış rotalar, MaterialApp'teki routes özelliği aracılığıyla tanımlanır; burada her anahtar bir yol dizesidir ve değer bir Widget döndüren bir fonksiyondur. Dinamik rotalar (parametreli) için onGenerateRoute kullanılır — RouteSettings alan ve bir Route döndüren bir geri çağrı. Bu, arguments parametresi aracılığıyla argümanların iletilmesine ve derin navigasyonun uygulanmasına olanak tanır.

Flutter Cookbook'a (2026) göre, pushNamed aracılığıyla argüman iletimi, arguments: Object? parametresiyle yapılır. Alıcı ekran, ModalRoute.of(context)!.settings.arguments aracılığıyla argümanları çıkarır ve global değişkenler veya InheritedWidget olmadan tür güvenli veri aktarımı sağlar.

Bilinmeyen rotaları işleme

MaterialApp'teki onUnknownRoute özelliği, pushNamed'in var olmayan bir rotayla çağrıldığı durumları işler. Bu, 404 ekranı göstermek veya ana sayfaya yönlendirmek için kullanışlıdır. onGenerateRoute ile kombinasyon halinde, olası tüm navigasyon senaryolarının tam kapsamını sağlar.

Navigator 2.0 (Router API olarak da bilinir), Flutter 2.0'da tanıtılan bildirimsel bir navigasyon yaklaşımıdır. Geliştiricinin push/pop çağırdığı emir kipi Navigator 1.0'ın aksine, Router durum aracılığıyla navigasyonu yönetir ve tarayıcı URL'sini geçerli ekranla otomatik olarak senkronize eder. Bu, özellikle web uygulamaları ve masaüstü sürümleri için önemlidir.

Navigator 2.0 mimarisi üç temel bileşenden oluşur: RouteInformationParser URL'yi bir rota yapılandırmasına ayrıştırır, RouterDelegate yapılandırmayı bir Route listesine dönüştürür ve BackButtonDispatcher sistem Geri düğmesini işler. Bu mimari, navigasyonu tamamen tahmin edilebilir ve test edilebilir hale getirir.

Navigator 2.0 ile çalışmayı basitleştirmek için sarmalayıcı paketler vardır: go_router (Google tarafından önerilir), auto_route ve beamer. go_router, RouterDelegate'ı manuel olarak uygulamadan iç içe navigasyon, yönlendirmeler ve derin bağlantıları destekleyen rotalar tanımlamak için bildirimsel bir DSL sağlar. pub.dev'e (2026) göre, go_router bildirimsel yaklaşımı tercih eden yeni Flutter projelerinin %35'inde kullanılmaktadır.

Adlandırılmış rotalar ve ekranlar arasında veri iletimi ile Navigator örneğini inceleyelim. Kod, bir ürün listesi ekranını, detay ekranına geçişi ve sonuçla dönüşü gösterir.

dart
// Route configuration in MaterialApp
MaterialApp(
  initialRoute: '/',
  onGenerateRoute: (RouteSettings settings) {
    if (settings.name == '/') {
      return MaterialPageRoute(
        builder: (context) => const ProductListPage(),
      );
    }
    if (settings.name == '/product') {
      final productId = settings.arguments as String;
      return MaterialPageRoute(
        builder: (context) => ProductDetailPage(productId: productId),
      );
    }
    return MaterialPageRoute(
      builder: (context) => const NotFoundPage(),
    );
  },
)

// Navigation with data passing
final result = await Navigator.pushNamed(
  context,
  '/product',
  arguments: 'product_42',
);

// Getting data on the receiving screen
final args = ModalRoute.of(context)!.settings.arguments as String;

// Replace screen after login
Navigator.pushReplacementNamed(context, '/home');

// Clear stack to main screen
Navigator.pushNamedAndRemoveUntil(
  context,
  '/home',
  (route) => false,
);

Örnekte, Navigator.pushNamed ürün kimliğini detay ekranına iletir. Navigator.pop(context, updatedProduct) aracılığıyla dönüşte, çağıran ekran result değişkeninde güncellenmiş verileri alır. pushReplacementNamed yetkilendirmeden sonra geçerli ekranı değiştirir ve (route) => false koşuluyla pushNamedAndRemoveUntil yığını tamamen temizleyerek önceki ekranlara geri dönüşü engeller.

Sıkça Sorulan Sorular

Navigator 1.0 ve Navigator 2.0 arasındaki fark nedir?

Navigator 1.0 — push ve pop yöntemleriyle emir kipi bir API, basit mobil uygulamalar için uygundur. Navigator 2.0 — Router, RouterDelegate ve RouteInformationParser aracılığıyla bildirimsel bir API, URL yönlendirmesi, derin bağlantılar ve uyarlanabilir navigasyon içeren web uygulamaları için gereklidir. Pratik projeler için, Navigator 2.0 üzerinde basitleştirilmiş bir sarmalayıcı olarak go_router önerilir.

Navigator aracılığıyla ekranlar arasında veri nasıl iletilir?

Veriler, pushNamed'deki arguments parametresi aracılığıyla veya doğrudan Route yapıcısı aracılığıyla iletilir. Alıcı ekranda, veriler ModalRoute.of(context)!.settings.arguments aracılığıyla çıkarılır. Verileri döndürmek için Navigator.pop(context, result) kullanın — çağıran ekran, push'tan döndürülen Future değeri olarak sonucu alacaktır.

Geri düğmesi neden önceki ekrana dönmüyor?

Bu, geçerli ekran pushReplacement aracılığıyla açıldıysa olur, bu da önceki Route'u yığından kaldırır. Bu durumda, navigasyon geçmişi yoktur ve Geri düğmesi uygulamayı kapatır. Geri dönmek için pushReplacement yerine normal push kullanın. Ayrıca Navigator.pop çağrısının geçerli ekranda doğru şekilde işlendiğini kontrol edin.

Önceki ekrana dönüş nasıl engellenir?

Geçerli ekranı yenisiyle değiştirmek için pushReplacement kullanın — önceki ekran yığından kaldırılır ve ona geri dönülemez. Tam geçmiş temizliği için (route) => false koşuluyla pushAndRemoveUntil kullanın. Alternatif olarak, sistem Geri düğmesini engellemek için WillPopScope (kullanımdan kaldırıldı) veya PopScope'u geçersiz kılabilirsiniz.

go_router nedir ve ne zaman kullanılmalıdır?

go_router, Navigator 2.0 üzerine inşa edilmiş Google'ın bildirimsel navigasyon paketidir. İç içe yerleştirme, yönlendirmeler, derin bağlantılar ve BottomNavigationBar için ShellRoute desteğiyle rotalar tanımlamak için basit bir DSL sağlar. Yeni projeler için, özellikle web desteği veya korumalı rotalarla karmaşık navigasyon modelleri gerekiyorsa go_router kullanın.

Özet

  • Navigator — push, pop, pushReplacement ve pushAndRemoveUntil yöntemleriyle Route yığınını kontrol eden Flutter navigasyon yöneticisi
  • LIFO yığını — her push üste bir Route ekler, pop en üsttekini kaldırır; yığın, son giren ilk çıkar ilkesine göre geçiş geçmişini saklar
  • pushReplacement — geçerli ekranı geri dönüş imkanı olmadan değiştirir, giriş ve onboarding senaryoları için kritiktir
  • Adlandırılmış rotalar — argüman iletimiyle merkezi rota tanımı için RouteSettings ve onGenerateRoute ile pushNamed
  • Navigator 2.0 — web derin bağlantıları için Router, RouterDelegate ve RouteInformationParser aracılığıyla bildirimsel navigasyon
  • go_router — basit DSL ve ShellRoute desteğiyle Google tarafından önerilen Navigator 2.0 sarmalayıcısı
  • Veri iletimi — pushNamed'de arguments aracılığıyla ve Navigator.pop(context, value) kullanarak push'tan Future aracılığıyla sonuç döndürme

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun