Flutter?GetPageRoute實現(xiàn)嵌套導航學習
1. 嵌套導航-GetPageRoute
本文主要介紹在Getx下快速實現(xiàn)一個嵌套導航
嵌套導航顧名思義,我們導航頁面中嵌套一個獨立的路由,效果如下
點擊跳轉
代碼如下,也是比較簡單
return Scaffold( appBar: AppBar(title: const Text('嵌套導航'),), body: Navigator( key: Get.nestedKey(1), // create a key by index initialRoute: '/', onGenerateRoute: (settings) { if (settings.name == '/') { return GetPageRoute( page: () => Scaffold( appBar: AppBar( title: const Text("首頁"), backgroundColor: Colors.blue ), body: Center( child: ElevatedButton( onPressed: () { Get.toNamed('/second', id:1); // navigate by your nested route by index }, child: const Text("跳轉下一頁"), ), ), ), ); } else if (settings.name == '/second') { return GetPageRoute( page: () => Center( child: Scaffold( appBar: AppBar( title: const Text("第二頁"),backgroundColor: Colors.blue ), body: const Center( child: Text("第二頁") ), ), ), ); } } ), );
通過Navigator
這個widget把我們的路由放入新的導航中,通過onGenerateRoute
來區(qū)分頁面的路由跳轉,key使用的是Get.nestedKey(1)
來區(qū)分具體頁面。GetPageRoute
創(chuàng)建路由頁面
2. 自定義拓展
我們也可以添加占位圖,用于存放一些廣告頁
Column( children: [ Container( color: Colors.amberAccent, height: 100, child: const Center(child: Text('我是輪播圖')), ), Expanded( child: Navigator())]
這里使用Column
進行包裹,Expanded
撐開下部分。
3. 使用bottomNavigationBar
class NestedNavigatePage extends StatelessWidget { const NestedNavigatePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { final logic = Get.find<NestedNavigateLogic>(); final state = Get.find<NestedNavigateLogic>().state; return Scaffold( appBar: AppBar(title: const Text('嵌套導航'),), body: Column( children: [ Container( color: Colors.amberAccent, height: 100, child: const Center(child: Text('我是輪播圖')), ), Expanded( child: Navigator( key: Get.nestedKey(1), // create a key by index initialRoute: '/home', onGenerateRoute: logic.onGenerateRoute, ), ), ], ), bottomNavigationBar:Obx(() => BottomNavigationBar( items: const [ BottomNavigationBarItem(icon: Icon(Icons.home),label: '首頁'), BottomNavigationBarItem(icon: Icon(Icons.list),label: '列表'), BottomNavigationBarItem(icon: Icon(Icons.people),label:'我的'), ], currentIndex: state.selectIndex.value, onTap: logic.selectTabBarIndex, selectedItemColor: Colors.red, )), ); } }
state
中定義數(shù)據(jù)
class NestedNavigateState { var selectIndex = 0.obs; List<String> pages = ['/home','/list','/mine']; NestedNavigateState() { ///Initialize variables } }
logic
中實現(xiàn)邏輯
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'nested_navigate_state.dart'; class NestedNavigateLogic extends GetxController { final NestedNavigateState state = NestedNavigateState(); selectTabBarIndex( int index){ state.selectIndex.value = index; Get.toNamed(state.pages[index],id: 1); } Route? onGenerateRoute(RouteSettings settings) { return GetPageRoute( settings: settings, page: () => page(settings.name!), transition: Transition.leftToRightWithFade, ); } Widget page(String title) { return Center( child: Scaffold( // appBar: AppBar( // title: Text(title), backgroundColor: Colors.blue // ), body: Center( child: Text(title) ) )); } }
點擊通過obx
自動響應
4.小結
我們通過GetPageRoute
可以進行導航嵌套,方便我們實現(xiàn)一些特定需求。同時我們可以配合bottomNavigationBar
實現(xiàn)tabbr效果。 創(chuàng)建平行導航堆棧可能是危險的。
理想的情況是不要使用NestedNavigators
,或者盡量少用。如果你的項目需要它,請繼續(xù),但請記住,在內(nèi)存中保持多個導航堆棧可能不是一個好主意。
以上就是Flutter GetPageRoute實現(xiàn)嵌套導航學習的詳細內(nèi)容,更多關于Flutter GetPageRoute嵌套導航的資料請關注腳本之家其它相關文章!
相關文章
iOS中使用JSPatch框架使Objective-C與JavaScript代碼交互
有了JSPatch,我們便可以在iOS App開發(fā)中令JavaScript代碼調(diào)用原生的Objective-C屬性和方法等,下面就來詳細看一下如何在iOS中使用JSPatch框架使Objective-C與JavaScript代碼交互2016-06-06iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用(下)
本篇文章通過代碼實例給大家講述了iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用,對此有需要的朋友可以測試參考下。2018-04-04iOS用UITextField切換明文/密文顯示時末尾空白的問題解決
最近在工作中遇到一個問題,利用UITextField切換明文/密文顯示時發(fā)現(xiàn)字符串后面會出現(xiàn)一段空白,所以下面這篇文章主要給大家介紹了iOS用UITextField切換明文/密文顯示時末尾空白問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05iOS開發(fā)中UIWebView的加載本地數(shù)據(jù)的三種方式
這篇文章主要介紹了iOS開發(fā)中UIWebView的加載本地數(shù)據(jù)的三種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09iOS開發(fā)中使用Quartz2D繪圖及自定義UIImageView控件
這篇文章主要介紹了iOS開發(fā)中使用Quartz2D繪圖及自定義UIImageView控件的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-11-11iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫詳解
這篇文章主要給大家介紹了關于iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-12-12