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 — 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.
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.
| Metod | Təsvir | Tətbiq ssenarisi |
|---|---|---|
| push | Yığının yuxarısına Route əlavə edir | Qayıtma imkanı ilə yeni ekrana keçid |
| pop | Yığından yuxarıdakı Route-u silir | Əvvəlki ekrana qayıdış |
| pushReplacement | Cari Route-u yenisi ilə əvəz edir | Daxil olduqdan sonra — giriş ekranı əsas ekranla əvəz olunur |
| pushAndRemoveUntil | Route əlavə edir və şrtə qədər əvvəlkiləri silir | Tarixçəni təmizləyərək əsas ekrana çıxış |
| popUntil | Şrtə çatılana qədər Route-ları yığından silir | Tarixçədə müəyyən ekrana qayıdış |
| maybePop | Yalnız yığında >1 Route varsa pop edir | Təsadüfi basıldıqda tətbiqin bağlanmasının qarşısını almaq |
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 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.
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.
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_route və beamer. 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.
// 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 — 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.
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.
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.
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 — 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ə
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.
Həm də oxuyun