Navigator.of(context).push( MaterialPageRoute(
quruvchi: (BuildContext kontekst) { qaytish _screen2 (kontekst);
},
),
);
},
)
],
),
);
}
Bu erda siz Navigatorni tekshirishingiz mumkin vidjetga uning Navigator.of yordamida kirish mumkin statik usul. Siz allaqachon bu bilan tanish bo'lasiz va siz taxmin qilganingizdek, bu yo'l biz kirish the mos keladigan Navigator ajdod dan a xos kontekst, va ha, bizda ko'p Navigator bo'lishi mumkin daraxtdagi vidjetlar. Bu ajoyib, chunki biz ilovaning kichik bo'limlarida mustaqil navigatsiyaning turli qismlariga ega bo'lishimiz mumkin.
, keling, RaisedButton -ni ko'rib chiqaylik vidjet yoqilgan Qayta qo'ng'iroq, qaerda biz Durang a yangi Marshrut ichiga the navigatsiya. Kimdan Bu yerga, the qiymat biz o'tish uchun the Durang usul onGenerateRoute dan qaytarilgan usulga o'xshaydi ilgari qo'shilgan Navigatorda qayta qo'ng'iroq qilish .
Kimga umumlashtirish, bizning yuqori Navigator vidjet foydalanadi the onGenerateRoute qayta qo'ng'iroq qilish shunchaki boshlang'ich Marshrutni ta'minlash orqali navigatsiyani ishga tushirish uchun . Keyinchalik, yangi marshrutni surish uchun ekran tugmalari qo'shildi push() tugmasidan foydalanib navigatsiyaga o'ting Navigator usuli vidjet:
// tugmasi yoqilgan ekran 2 uchun navigatsiya qilish orqaga bosilgan: () {
Navigator.of(context).pop();
},
// _NavigatorDirectlyAppState
The _ekran2 vidjet hisoblanadi deyarli teng uchun _screen1 ; the faqat farq hisoblanadi bu bu ochiladi o'zi navigatsiyadan chiqadi va _screen1 ga qaytadi vidjet.
Biroq, oldingi misolda muammo bor. Agar biz Androidda orqaga tugmasini bossak, uchun misol, esa yoqilgan Ekran 2 , biz kerak ket orqaga uchun Ekran 1 kabi a natija, lekin unday emas. Biz Navigatorni qo'shganimizdek vidjetni o'zimiz yaratgan bo'lsak, tizim bundan xabardor emas: biz uni o'zimiz ham boshqarishimiz kerak.
Kimga boshqarish the orqaga tugma, biz kerak uchun foydalanish VidjetlarBindingObserver , qaysi mumkin bo'l Flutter bilan bog'liq hayot tsikli xabarlariga munosabat bildirish uchun ishlatiladi ilova. GitHub-dagi manba kodlarida ko'rib turganingizdek ( navigatsiyada katalog), biz birinchi navbatda ilovamizni Stateful ga aylantirdik va WidgetsBindingObserver qo'shildi davlatimizga aralashish sifatida sinf. Biz kuzatuvchini initState() da ishga tushirdik. WidgetsBinding.instance.addObserver bilan (bu); va WidgetsBinding.instance.removeObserver(bu) bilan kuzatuvchini to'xtatdi; on dispose() . Ushbu sozlash yordamida biz didPopRoute() ni bekor qilishimiz mumkin. usuli
dan VidjetlarBindingObserver va boshqarish nima sodir bo'ladi qachon the tizimi aytadi the marshrutni ochish uchun ilova. didPopRoute () usul hujjatlarda quyidagicha tavsiflanadi:
"[Bu bu] chaqirdi qachon the tizimi aytadi the ilova uchun pop the joriy marshrut. Uchun misol, Androidda bu foydalanuvchi orqaga tugmasini bosganda chaqiriladi."
didPopRoute () ichida usuli uchun biz Navigatorimizdan Marshrutni ochishimiz kerak vidjet. Biroq, biz mumkin emas kirish Navigator orqali uning statik ning usul, kabi biz qil emas bor bu erda kontekst bu erda. Muqobil ravishda Navigatorga kalit qo'shishimiz mumkin va uning holatiga bu yerdan kiring:
// navigation_directly.dart
sinf _NavigatorDirectlyAppState uzaytiradi Holat {
Do'stlaringiz bilan baham: |