Route — Flutter-də Navigator naviqasiya tarixçəsində ayrıca ekranı və ya səhifəni təmsil edən abstrakt sinifdir. Route-un konkret tətbiqləri — MaterialPageRoute, CupertinoPageRoute və PlatformRoute — ekranın necə göstərildiyini və keçid zamanı hansı animasiyadan istifadə edildiyini müəyyən edir. Adi vidjetdən fərqli olaraq, Route didPush, didPop, didReplace və didChangeNext metodları ilə öz həyat dövrünə malikdir. Flutter API Reference (2026)-ya görə, hər bir Route ModalBarrier-i idarə edir, platforma xüsusiyyətlərini (iOS-da geri sürüşdürmə) nəzərə alır və ekranlar arasında vəziyyət izolyasiyasını təmin edir.
Əsas məqamlar
Route — Flutter naviqasiya sisteminin əsasıdır. İstifadəçinin tətbiqdə gördüyü hər bir ekran Navigator stekində yerləşən Route obyekti ilə təmsil olunur. Route ekranı idarəetmə kodundan abstraksiya edir: Navigator Route-u əlavə edir və silir, Route-un daxilində isə istifadəçinin gördüyü interfeys yerləşir. Bu arxitektura naviqasiya və göstərmə arasında məsuliyyəti ayırır.
Adi vidjet dəyişdirməsindən fərqli olaraq, Route adi vidjetlər üçün əlçatmaz xidmətlər təqdim edir: ModalBarrier (dialoq açıq olduqda fonun qaraldılması), giriş və çıxış animasiyasının idarə edilməsi, Android-də aparat “Geri” düyməsinin işlənməsi və ekranlar arasında hamar keçidlər üçün Hero animasiyası ilə inteqrasiya.
Flutter Cookbook (2026)-ya görə, Route Hero animasiyası üçün əsas elementdir: bir Route-dakı Hero vidjeti avtomatik olaraq növbəti Route-dakı Hero vidjetinə keçidi animasiya edərək “uçan” element effekti yaradır. Bu, məhz Route-un animasiya zamanı hər iki ekranı Overlay-də saxlaması sayəsində mümkündür.
Route həm sadə mobil tətbiqlər (Navigator 1.0 vasitəsilə), həm də dərin keçidlərlə mürəkkəb ssenarilər (Navigator 2.0) üçün əsasdır. Navigator 2.0-da Route, RouterDelegate-in marşrut konfiqurasiyasından çevirdiyi Page-i təmsil edir. Beləliklə, Route-u başa düşmək Flutter-in istənilən naviqasiya sistemi ilə işləmək üçün zəruridir — seçilmiş yanaşma və ya paketdən asılı olmayaraq.
Flutter bir neçə daxili Route tətbiqi təqdim edir, hər biri davranışı müəyyən platformaya uyğunlaşdırır. Düzgün Route növünün seçilməsi istifadəçi təcrübəsinə təsir edir: Android-də Material animasiyası və iOS-da Cupertino animasiyası “doğma” tətbiq hissi yaradır.
| Route növü | Animasiya | Platforma | Xüsusiyyətlər |
|---|---|---|---|
| MaterialPageRoute | Aşağıdan yuxarı sürüşdürmə | Android, desktop | keçiddə kölgə, avtomatik SafeArea işlənməsi |
| CupertinoPageRoute | Sağdan sola sürüşdürmə | iOS, iPadOS | geri sürüşdürmə jesti, keçiddə şəffaf fon |
| PlatformRoute | Avtomatik seçim | Bütün platformalar | növü TargetPlatform əsasında seçir |
| PageRouteBuilder | Xüsusi | Bütün platformalar | AnimationController vasitəsilə animasiya üzərində tam nəzarət |
MaterialPageRoute — ən çox istifadə olunan Route tətbiqidir. Yeni ekranın girişini aşağıdan yuxarıya tədricən görünmə ilə animasiya edir. Çıxış zamanı ekran yuxarıdan aşağıya animasiya edərək ilkin vəziyyətə qayıdır. Alət paneli (AppBar) və ekranın məzmunu ayrıca animasiya edilərək iyerarxiya effekti yaradır.
CupertinoPageRoute iOS-dan UINavigationController-i təqlid edir. Yeni ekran sağdan daxil olaraq əvvəlkini örtür. Əsas xüsusiyyət — CupertinoBackGestureDetector vasitəsilə tətbiq edilən interaktiv geri sürüşdürmə jestinin dəstəyidir. Bu jest hətta animasiyanın ortasında belə işlənərək iPhone istifadəçilərinə tanış olan təbii davranışı təmin edir.
Route adi StatefulWidget-in həyat dövründən fərqlənən öz həyat dövrünə malikdir. Bu dövrü başa düşmək məlumatların düzgün işə salınması, axınlara abunə olmaq və ekran bağlandıqda resursların boşaldılması üçün zəruridir.
Route-un həyat dövrü dörd əsas mərhələdən ibarətdir. Transition — Route yaradılır və girişdə animasiya edilir (didPush çağırılır). Active — Route tam göstərilir və istifadəçi ilə qarşılıqlı əlaqədə olur. Inactive — digər Route cari olanı örtür (dialoq, alt ekran), lakin Route stekdə qalır. Disposed — Route stekdən silinir və məhv edilir, didPop və dispose çağırılır.
Route-un həyat dövrü metodları xüsusi tətbiqdə dəyişdirilə bilər. Məsələn, didPop Route stekdən silindikdə çağırılır — burada məlumatların qaralama versiyasını saxlamaq olar. didChangeNext stekdə növbəti Route dəyişdikdə çağırılır — naviqasiya tarixçəsi dəyişdikdə UI-ni yeniləmək üçün faydalıdır.
Flutter API Route.didPop (2026)-ya görə, Route-un həyat dövrünü Route daxilindəki State-in həyat dövrü ilə qarışdırmamaq vacibdir. Route daxilindəki StatefulWidget-ın öz initState və dispose metodları var ki, onlar müvafiq olaraq Transition və Disposed mərhələlərində çağırılır. Route öz daxili State-dən daha uzun yaşayır — Route onun vidjetləri başqa bir Route tərəfindən müvəqqəti gizlədilsə belə Overlay-də qalır.
Route həm girişdə (yaradılarkən), həm də çıxışda (tamamlandıqda) məlumat ötürmək üçün mexanizmlər təqdim edir. Route vasitəsilə düzgün məlumat ötürülməsi qlobal dəyişənlərə və InheritedWidget-ə ehtiyacı aradan qaldıraraq naviqasiyanı tip təhlükəsizliyi olan və proqnozlaşdırıla bilən edir.
Yeni ekrana məlumat ötürmək üçün qəbul edən vidjetin konstruktoru və ya Navigator.pushNamed-də arguments arqumenti istifadə olunur. Route daxilində məlumatlar Route obyektində saxlanılan RouteSettings.arguments vasitəsilə əlçatandır. Bu yanaşma bütün Route növləri üçün işləyir — MaterialPageRoute, CupertinoPageRoute və xüsusi tətbiqlər.
Məlumatı qaytarmaq üçün Navigator.pop(context, result) ikinci arqumenti istifadə olunur. Navigator.push pop-a ötürülən dəyərlə tamamlanan Future
MaterialPageRoute ilə birbaşa Navigator.push çağırışında məlumatlar hədəf ekranın konstruktoru vasitəsilə ötürülür. MethodChannel istifadə edilmir — bu təmiz Dart qarşılıqlı əlaqəsidir. Bu yanaşma mürəkkəb obyektlərin tip təhlükəsiz ötürülməsi üçün üstünlük təşkil edir.
Xüsusi Route-un öz animasiyası və məlumat ötürülməsi ilə yaradılması nümunəsinə baxaq. PageRouteBuilder animasiya əyrisi və müddəti üzərində tam nəzarətlə giriş və çıxış animasiyasını təyin etməyə imkan verir.
// Sürüşdürmə animasiyası ilə xüsusi Route
Navigator.push(context, PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) {
return DetailPage(productId: '42');
},
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(0.0, 0.3);
const end = Offset.zero;
final tween = Tween(begin: begin, end: end);
final offsetAnimation = animation.drive(tween);
return SlideTransition(position: offsetAnimation, child: child);
},
transitionDuration: const Duration(milliseconds: 400),
));
// Ekrandan məlumatı qaytar
ElevatedButton(
onPressed: () => Navigator.of(context).pop({'selected': true, 'id': '42'}),
child: const Text('Seç'),
);
// Çağıran ekranda nəticəni əldə et
final result = await Navigator.push(context, MaterialPageRoute(
builder: (context) => const SelectionPage(),
));
if (result != null) {
print('Seçildi: ${result['selected']}');
}
Nümunədə PageRouteBuilder şəffaflıqla aşağıdan sürüşdürmə xüsusi animasiyasını təyin edir. transitionDuration animasiya sürətini təyin edir. Kod həmçinin nəticənin ötürülməsini nümayiş etdirir: təfərrüat ekranı istifadəçi seçimi ilə Map qaytarır, çağıran ekran isə bu məlumatları push-dan Future vasitəsilə alır. Route tam izolyasiyanı təmin edir: təfərrüat ekranındakı qaralamalar siyahının vəziyyətinə təsir etmir.
Tez-tez verilən suallar
Route — naviqasiya səviyyəsində ekranı idarə edən obyektdir: animasiya, ModalBarrier və həyat dövrünü saxlayır. Widget — interfeys hissəsinin təsviridir. Route özündə Widget ehtiva edir, həm də adi vidjetlər üçün əlçatmaz xidmətlər (Overlay təbəqəsi, Hero animasiyası) təqdim edir. Bir Route istənilən dərinlikdə mürəkkəb vidjet iyerarxiyasını ehtiva edə bilər.
Parametrlərlə PageRouteBuilder istifadə edin: pageBuilder (ekranın qurulması) və transitionsBuilder (animasiyanın təyini). transitionsBuilder-də animation (0.0–1.0) və paralel animasiyalar üçün secondaryAnimation mövcuddur. Tam nəzarət üçün Route-un alt sinfini yaradın və buildPage, createAnimationController və buildTransitions-i dəyişdirin, bu sizə aşağı səviyyəli AnimationController-a giriş imkanı verəcək.
Mürəkkəb obyektləri ötürmək üçün birbaşa Navigator.push zamanı hədəf ekranın konstruktorundan və ya pushNamed zamanı arguments arqumentindən istifadə edin. Obyektin seriyalaşdırıla bilən olduğundan əmin olun (Map, JSON və ya xüsusi sinif). Flutter-də tip təhlükəsiz ötürmə üçün RouteSettings vasitəsilə ötürülmə zamanı düzgün deseriyalaşdırmaya zəmanət verən freezed və ya json_serializable modelləri istifadə olunur.
Route.dispose Route Navigator stekində qaldıqda çağırılmır. Məsələn, yeni Route açıldıqda köhnə Route qeyri-aktiv vəziyyətə (Inactive) keçir, lakin məhv edilmir — sürətli qayıdış üçün stekdə qalır. Dispose yalnız Route pop, pushReplacement və ya pushAndRemoveUntil vasitəsilə stekdən silindikdə çağırılır. Resursları boşaltmaq üçün Route-un öz dispose-u deyil, Route daxilindəki State-in dispose-undan istifadə edin.
Cari Route-u BuildContext-dən almaq üçün ModalRoute.of(context) istifadə edin. ModalRoute.isActive xassəsi Route-un cari görünən ekran olub-olmadığını göstərir. ModalRoute.isCurrent — Route stekin zirvəsindədirsə true-dur. Stekdəki dəyişiklikləri izləmək üçün RouteAware və RouteObserver vasitəsilə Navigator müşahidəçilərinə abunə olun, onlar aktiv Route dəyişdikdə xəbərdarlıq edir.
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