第一點:push使用
1.pushNamed——Navigator.of(context).pushNamed('routeName')
Navigator.of(context).pushNamed('/screen1'); 直接進入screen1頁面(每次都將新建一個新的頁面)
2.pushReplacementNamed——Navigator.of(context).pushReplacementNamed('routeName')
指把當前頁面在棧中的位置替換成跳轉的頁面(替換導航器的當前路由,通過推送路由[routeName]),當新的頁面進入后,之前的頁面將執行dispose方法。
即比如當前從頁面1進入頁面2,在頁面2使用 Navigator.of(context).pushReplacementNamed('/screen3');進入頁面3,當進入了頁面3后,頁面2將執行dispose方法,此時在頁面3返回時,會回到頁面1.
使用情況:例如 從SplashScreen到HomeScreen。它應該只顯示一次,用戶不應該再從主屏幕回到它。在這種情況下,由於我們將要進入一個全新的屏幕, 我們可能想要使用這個方法來實現它的enter animation屬性。
3.pushReplacement——Navigator.pushReplacement( context, MaterialPageRoute(builder: (BuildContext context) => screen4()))
pushReplacement只需new對應頁面即可,而且可以傳遞 參數(傳參方式類似於本文后續所說的傳遞方法)。和pushReplacementNamed只是路由的傳遞有差別,pushReplacementNamed的是傳遞路由名稱(頁面對應的名稱,需在入口定義(本文第一點))
4.popAndPushNamed——Navigator.popAndPushNamed(context, 'routeName')
指將當前頁面pop,然后跳轉到制定頁面(將當前路由彈出導航器,並將命名路由推到它的位置。)
5.pushNamedAndRemoveUntil
5.1.Navigator.of(context).pushNamedAndRemoveUntil('/screen4', (Route<dynamic> route) => false)
指將制定的頁面加入到路由中,然后將其他所有的頁面全部pop, (Route route) => false將確保刪除推送路線之前的所有路線。 這時候將打開一個新的screen4頁面
5.2.Navigator.of(context).pushNamedAndRemoveUntil('/screen4', ModalRoute.withName('/screen1'))
5.4.Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (BuildContext context) => new screen4()), ModalRoute.withName('/')
Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (BuildContext context) => Screen4()), (Route<dynamic> route) => false, );
這時候進入4后。4將成為唯一的一個頁面。其他頁面都將pop出棧,這個跟上述pushNamedAndRemoveUntil也一致。
6.popUntil——Navigator.popUntil(context, ModalRoute.withName('/screen2'))
pop
1.Navigator.of(context).maybePop()
maybePop 會自動進行判斷,如果當前頁面pop后,會顯示其他頁面,不會出現問題,則將執行當前頁面的pop操作 否則將不執行。
2.Navigator.of(context).canPop()
canPop 判斷當前頁面能否進行pop操作,並返回bool值
3.Navigator.of(context).pop()
直接退出當前頁面
https://github.com/mingfeng002/yinl/tree/master/yinll_flutter/lib/route_demo