Navigator: Flutter-da ekranların idarə edilməsi

Müəllif: IT Sectr Dərc olunub: 2026-07-02 Oxuma vaxtı: 9 dəq

Navigator — Flutter-da ekranlar arasında hərəkət etmək üçün push, pop, pushReplacement və pushNamed metodları vasitəsilə marşrutlar (Route) yığınını idarə eden vidjet-menecer. State vasitəsilə vidjetlərin birbaşa dəyişdirilməsindən fərqli olaraq, Navigator bütöv ekranlar səviyyəsində işləyir: keçid tarixçəsini saxlayır və platforma animasiyalarını dəstəkləyir. Flutter API Reference (2026)-ya görə, Navigator 2.0 (Router) dərin keçidlər və adaptiv dizayn ilə mürəkkəb ssenarilər üçün deklarativ naviqasiya idarəetməsini təmin edir. Tipik bir tətbiqdə Navigator Android-də „Geri” düyməsinin və iOS-da sürüştürmə jestlərinin düzgün işləməsini təmin edir.

Başlıca

  • Navigator — push, pop, pushNamed, pushReplacement və pushAndRemoveUntil metodları vasitəsilə marşrut yığınını idarə eden naviqasiya meneceri
  • Marşrut yığını — Navigator ekranları LIFO yığınında saxlayır: hər push yuxarıdan ekran əlavə edir, pop isə yuxarıdakını silir
  • pushNamed — MaterialApp.routes və ya onGenerateRoute-də müəyyən edilmiş adlandırılmış marşrutlar üzrə naviqasiya
  • pushReplacement — cari ekranı əvvəlki ekrana qayıtmaq imkanı olmadan yenisilə əvəz etmək (məsələn, daxil olduqdan sonra)
  • Navigator 2.0 — veb və masaüstü naviqasiya üçün Router, RouterDelegate və RouteInformationParser ilə deklarativ API

Flutter-da Navigator nədir

Navigator — Flutter tətbiqində ekran naviqasiyasını həyata keçirən, Route obyektləri yığınını idarə edən vidjetdir. Hər push çağırışı yeni Route-u yığının yuxarısına yerləşdirir, pop yuxarıdakı Route-u silir və əvvəlki ekrana qayıdır. MaterialApp bütöv tətbiq üçün avtomatik Navigator yaradır və onu Navigator.of(context) vasitəsilə əlçatan edir.

StatefulWidget-dən fərqli olaraq, burada məzmun dəyişikliyi bir vidjet daxilində setState vasitəsilə baş verir, Navigator öz həyat dövrü olan bütöv ekranlarla işləyir. Yığındakı hər Route öz BuildContext-i ilə təcrid olunmuş vəziyyətdir, bu da yaddaş sızıntılarının qarşısını alır və asılılıqların idarə edilməsini sadələşdirir. Pop çağırılarkən istifadə olunmayan Route məhv edilir, resursları azad edir.

Flutter Navigation Guide (2026)-ya görə, Navigator imperativ API-dən (Navigator 1.0) deklarativə (Navigator 2.0) doğru təkamül keçirmişdir. Navigator 1.0 birbaşa push/pop metodlarından istifadə edir, bu sadə ssenarilər üçün əlverişlidir. Navigator 2.0 (Router) dərin keçidlər, adaptiv naviqasiya və veb marşrutlaşdırması olan tətbiqlər üçün uyğundur.

Navigator daxildən necə işləyir

Daxildə Navigator Route-ları bir-birinin üzərində göstərən xüsusi vidjet olan Overlay-dən istifadə edir. Hər Route yığındakı dərinliyə uyğun z-indeksi ilə Overlay-də öz mövqeyini yaradır. Bu, push zamanı yeni ekranın niyə əvvəlkinin üzərində animasiya edildiyini, pop zamanı isə əvvəlki ekranın niyə göstərilməyə hazır olduğunu izah edir: o məhv edilməyib, sadəcə yeninin altında Overlay-də qalmışdır.

Keçid animasiyaları üçün Navigator ThemeData-də dəyişdirilə bilən PageTransitionsTheme istifadə edir. Platforma animasiyaları iOS üçün CupertinoPageRoute (sağdan sürüştürmə) və Android üçün MaterialPageRoute (aşağıdan sürüştürmə) vasitəsilə təyin edilir. Navigator PlatformRoute istifadə edərkən avtomatik düzgün animasiyanı seçir.

Navigator Route yığınını idarə etmək üçün metodlar dəsti təqdim edir. Hər metod sadə keçiddən ekran tarixçəsinin tam dəyişdirilməsinə qədər müəyyən naviqasiya tapşırığını həll edir. Əsas metodları istifadə nümunələri ilə nəzərdən keçirɘk.

MetodTəsvirTətbiq ssenarisi
pushYığının yuxarısına Route əlavə edirQayıtma imkanı ilə yeni ekrana keçid
popYığından yuxarıdakı Route-u silirƏvvəlki ekrana qayıdış
pushReplacementCari Route-u yenisi ilə əvəz edirDaxil olduqdan sonra — giriş ekranı əsas ekranla əvəz olunur
pushAndRemoveUntilRoute əlavə edir və şrtə qədər əvvəlkiləri silirTarixçəni təmizləyərək əsas ekrana çıxış
popUntilŞrtə çatılana qədər Route-ları yığından silirTarixçədə müəyyən ekrana qayıdış
maybePopYalnız yığında >1 Route varsa pop edirTəsadüfi basıldıqda tətbiqin bağlanmasının qarşısını almaq

Push və Pop: əsas əməliyyatlar

push metodu Route qəbul edir və pop zamanı ötürülən nəticə ilə Future qaytarır. Bu, keçdiyimiz ekrandan məlumat almağa imkan verir. Məsələn, tarix seçimi ekranı Navigator.pop(context, selectedDate) vasitəsilə DateTime qaytara bilər. pop metodu arqumentsiz null qaytarır, arqumentlə isə dəyəri çağıran ekrana ötürür.

PushReplacement: ekranın əvəz edilməsi

pushReplacement cari Route-u yenisi ilə əvəz edir, cari olanı yığından silir. Bu, istifadəçinin əvvəlki ekrana qayıtmamalı olduğu ssenarilərdə vacibdir. Tipik nümunə — giriş ekranı: uğurlu daxil olduqdan sonra cari ekran əsas ekranla əvəz edilir və „Geri” düyməsi giriş formasına qayıtmır.

Adlandırılmış marşrutlar və onGenerateRoute

Navigator pushNamed metodu vasitəsilə adlandırılmış marşrutlar üzrə naviqasiyanı dəstəkləyir. Birbaşa Route yaratmaq əvəzinə, proqramçı mətn identifikatoru göstərir və Navigator MaterialApp-dəki konfiqurasiya əsasında avtomatik Route yaradır. Bu, kodu sadələşdirir və marşrutların tərifini bir yerdə mərkəzləşdirir.

Adlandırılmış marşrutlar MaterialApp-də routes xassəsi vasitəsilə təyin edilir, burada hər açar yol sətri, dəyər isə Widget qaytaran funksiyadır. Parametrli dinamik marşrutlar üçün onGenerateRoute — RouteSettings qəbul edib Route qaytaran geri çağırış istifadə olunur. Bu, arguments vasitəsilə arqumentləri ötürməyə və dərin naviqasiyanı həyata keçirməyə imkan verir.

Flutter Cookbook (2026)-ya görə, pushNamed vasitəsilə arqumentlərin ötürülməsi arguments: Object? parametri ilə həyata keçirilir. Qəbul edən ekran arqumentləri ModalRoute.of(context)!.settings.arguments vasitəsilə çıxarır, bu da qlobal dəyişənlər və ya InheritedWidget olmadan tip təhlükəsiz məlumat ötürülməsini təmin edir.

Naməlum marşrutların idarə edilməsi

MaterialApp-də onUnknownRoute xassəsi pushNamed mövcud olmayan marşrutla çağırıldıqda halları idarə edir. Bu, 404 ekranı göstərmək və ya əsas səhifəyə yönləndirmək üçün faydalıdır. onGenerateRoute ilə birlikdə bütün mümkün naviqasiya ssenarilərinin tam əhatə olunmasını təmin edir.

Navigator 2.0 (Router API kimi də tanınır) — Flutter 2.0-da təqdim edilmiş naviqasiyaya deklarativ yanaşmadır. Proqramçının push/pop çağırdığı imperativ Navigator 1.0-dən fərqli olaraq, Router vəziyyət vasitəsilə naviqasiyanı idarə edir, brauzer URL-ni cari ekranla avtomatik sinxronlaşdırır. Bu, xüsusilə veb tətbiqlər və masaüstü versiyalar üçün vacibdir.

Navigator 2.0 arxitekturası üç əsas komponentdən ibarətdir: RouteInformationParser URL-i marşrut konfiqurasiyasına çevirir, RouterDelegate konfiqurasiyanı Route siyahısına çevirir, BackButtonDispatcher isə sistem „Geri” düyməsini idarə edir. Belə arxitektura naviqasiyanı tamamilə proqnozlaşdırıla bilən və test edilə bilən edir.

Navigator 2.0 ilə işi sadələşdirmək üçün sarğıcı paketlər mövcuddur: go_router (Google tərəfindən tövsiyə olunur), auto_routebeamer. go_router RouterDelegate-nin əl ilə tətbiqi olmadan iç-içə naviqasiya, yönləndirmələr və dərin keçidlər dəstəyi ilə marşrutları təyin etmək üçün deklarativ DSL təmin edir. pub.dev (2026)-ya görə, go_router deklarativ yanaşmanı üstün tutan yeni Flutter layihələrinin 35%-də istifadə olunur.

Navigator nümunəsini adlandırılmış marşrutlar və ekranlar arasında məlumat ötürülməsi ilə nəzərdən keçirɘk. Kod məhsul siyahısı ekranını, təfşürat ekranına keçidi və nəticə ilə qayıdışı nümayiş etdirir.

dart
// MaterialApp-də marşrut konfiqurasiyası
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(),
    );
  },
)

// Məlumat ötürülməsi ilə naviqasiya
final result = await Navigator.pushNamed(
  context,
  '/product',
  arguments: 'product_42',
);

// Qəbul edən ekranda məlumatların əldə edilməsi
final args = ModalRoute.of(context)!.settings.arguments as String;

// Girişdən sonra ekranı əvəz et
Navigator.pushReplacementNamed(context, '/home');

// Yığını əsas ekrana qədər təmizlə
Navigator.pushNamedAndRemoveUntil(
  context,
  '/home',
  (route) => false,
);

Nümunədə Navigator.pushNamed məhsul identifikatorunu təfşürat ekranına ötürür. Navigator.pop(context, updatedProduct) vasitəsilə qayıdarkən çağıran ekran result dəyişənində yenilənmiş məlumatları alır. pushReplacementNamed avtorizasiyadan sonra cari ekranı əvəz edir, pushNamedAndRemoveUntil isə (route) => false şrti ilə yığını tamamilə təmizləyir, əvvəlki ekranlara qayıdışın qarşısını alır.

Tez-tez verilən suallar

Navigator 1.0 və Navigator 2.0 arasındakı fərq nədir?

Navigator 1.0 — sadə mobil tətbiqlər üçün əlverişli push və pop metodları ilə imperativ API. Navigator 2.0 — URL marşrutlaşdırması, dərin keçidlər və adaptiv naviqasiya ilə veb tətbiqlər üçün zəruri olan Router, RouterDelegate və RouteInformationParser vasitəsilə deklarativ API. Praktik layihələrdə Navigator 2.0 üzərində sadələşdirilmiş sarğıcı kimi go_router tövsiyə olunur.

Navigator vasitəsilə ekranlar arasında məlumatları necə ötürmək olar?

Məlumatlar pushNamed-də arguments arqumenti və ya birbaşa Route konstruktoru vasitəsilə ötürülür. Qəbul edən ekranda məlumatlar ModalRoute.of(context)!.settings.arguments vasitəsilə çıxarılır. Məlumatları qaytarmaq üçün Navigator.pop(context, result) istifadə edin — çağıran ekran nəticəni push-dən qaytarılan Future dəyəri kimi alır.

Niyə „Geri” düyməsi əvvəlki ekrana qayıtmır?

Bu, cari ekran pushReplacement vasitəsilə açıldıqda baş verir, o əvvəlki Route-u yığından silir. Bu halda naviqasiya tarixçəsi yoxdur və „Geri” düyməsi tətbiqi bağlayır. Qayıtmaq üçün pushReplacement yox, adi push istifadə edin. Həmçinin Navigator.pop çağırışının cari ekranda düzgün işləndiyini yoxlayın.

Əvvəlki ekrana qayıdışın qarşısını necə almaq olar?

Cari ekranı yenisi ilə əvəz etmək üçün pushReplacement istifadə edin — əvvəlki ekran yığından silinir və ona qayıtmaq olmur. Tarixçəni tam təmizləmək üçün (route) => false şrti ilə pushAndRemoveUntil istifadə edin. Alternativ olaraq sistem „Geri” düyməsini ələ keçirmək üçün WillPopScope (köhnəlmiş) və ya PopScope-u dəyişdirə bilərsiniz.

go_router nədir və onu nə zaman istifadə etməli?

go_router — Navigator 2.0 üzərində qurulmuş Google-dan deklarativ naviqasiya paketidir. O, iç-içəlik, yönləndirmələr, dərin keçidlər və BottomNavigationBar üçün ShellRoute dəstəyi ilə marşrutları təyin etmək üçün sadə DSL təmin edir. Yeni layihələrdə, xüsusilə veb dəstəyi və ya qorunan marşrutları olan mürəkkəb naviqasiya nümunələri tələb olunduqda go_router istifadə edin.

Nəticə

  • Navigator — push, pop, pushReplacement və pushAndRemoveUntil metodları ilə Route yığınını idarə edən Flutter naviqasiya meneceri
  • LIFO yığını — hər push Route-u yuxarıya əlavə edir, pop yuxarıdakını silir; yığın keçid tarixçəsini „son daxil olan, ilk çıxan” prinsipi ilə saxlayır
  • pushReplacement — qayıtma imkanı olmadan cari ekranın əvəz edilməsi, giriş və tanıtma ssenariləri üçün vacibdir
  • Adlandırılmış marşrutlar — arqumentlərin ötürülməsi ilə mərkəzləşdirilmiş marşrut təyini üçün RouteSettings və onGenerateRoute ilə pushNamed
  • Navigator 2.0 — veb dərin keçidləri üçün Router, RouterDelegate və RouteInformationParser vasitəsilə deklarativ naviqasiya
  • go_router — sadə DSL və ShellRoute dəstəyi ilə Navigator 2.0 üzərində Google tərəfindən tövsiyə olunan sarğıcı
  • Məlumat ötürülməsi — pushNamed-də arguments vasitəsilə və Navigator.pop(context, value) ilə push-dən Future vasitəsilə nəticənin qaytarılması

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun