有些文章吧,總是這個(gè)架構(gòu)那個(gè)堆這個(gè)棧的,然后一堆不認(rèn)識(shí)的英文縮寫,說人話Please,拿起鍵盤就是干
標(biāo)題通俗來說,就是原生與flutter 來回跳轉(zhuǎn)的處理,想怎么跳就怎么跳
- 以iOS為例子,Native -> Flutter 肯定是 push 一個(gè)Flutter的controller, 那Android就是一個(gè)Activity嘍
- 如果Flutter -> Flutter 就是還是在Flutter 的Controller 里, Native 的 導(dǎo)航棧不變, 解釋成人話就是, navigation.viewControllers 的數(shù)量不變,頂部還是 FlutterViewController
- 如果Flutter -> iOS 這種情況,那就跟我們正常push 一個(gè)controller 一樣嘍, 棧數(shù)量 +1.
以上呢,基本就是處理Native 跟 Flutter 來回跳轉(zhuǎn)的思路
知識(shí)點(diǎn)
- 我之前一直糾結(jié)這個(gè)Flutter 首頁的問題 ('/'),就是這個(gè)路由,不設(shè)置怎么初始化?
因?yàn)槲以?iOS 端設(shè)置了 initialRoute, 但是這個(gè)卻不是跟視圖,還能返回 ,我是真不知道!在initialRoute 跟 home 之間瞎操作了很多都沒有用 ps : 以上全廢話
- 我之前一直糾結(jié)這個(gè)Flutter 首頁的問題 ('/'),就是這個(gè)路由,不設(shè)置怎么初始化?
- (1) 只設(shè)置initialRoute的話,路由一定要有’/’,’/‘為首頁
- (2)initialRoute和home同時(shí)有的時(shí)候,使用initialRoute,路由里面可以沒有’/’,返回最后返回到home,home是首頁,
- (3)只有home時(shí),路由可以沒’/’,有不起作用。
- (4)home,initialRoute都沒有,在路由onGenerateRoute中找’/’,
- (5)initialRoute、home、路由的’/'都沒有時(shí),error。
重點(diǎn)??! 在FlutterApp 中 我們只設(shè)置 home ,然后用路由來跳轉(zhuǎn)
Start 開始我們的重點(diǎn)吧,說了一堆開始操作了
(一)auto_route 路由的 集成和怎么用
pubspec.yaml中添加 包括dev
dependencies:
flutter:
sdk: flutter
auto_route: ^0.3.1
dev_dependencies:
flutter_test:
sdk: flutter
auto_route_generator:
build_runner:
控制臺(tái):packages get
- 新建一個(gè) MyRouter.dart 千萬不要加 @initial 因?yàn)槲覀儾恍枰?/'的路由
@CupertinoAutoRouter()
class $MyRouter {
//@initial
HomePage homePage;
MinePage minePage;
CategoryPage categoryPage;
}
控制臺(tái):flutter packages pub run build_runner build
build完之后就會(huì)生成一個(gè)MyRouter.gr.dart 這個(gè)時(shí)候我們的MyRouter類才有的
- 去你的App 下面注冊路由
class MyApp extends StatelessWidget {
// This widget is the root of your application.
static MyNavigatorObserver navigatorObservers = MyNavigatorObserver();
@override
Widget build(BuildContext context) {
return CupertinoApp(
title: 'Home',
theme: CupertinoThemeData(
primaryColor: Colors.grey
),
navigatorObservers: [navigatorObservers],
onGenerateRoute: MyRouter.onGenerateRoute,
navigatorKey: MyRouter.navigator.key,
initialRoute: MyRouter.homePage,
);
}
- auto_route 使用
//跳轉(zhuǎn)頁面
//如果你頁面有初始化參數(shù)(就是要接收的字段 ),MinePageArguments 就會(huì)生成這個(gè)類 當(dāng)參數(shù)穿過去
MyRouter.navigator.pushNamed(MyRouter.minePage, arguments: MinePageArguments(name:"who")).then((value) {
print(value);
});
//退出頁面
MyRouter.navigator.pop({"backContent":"123"});
其他的方法自己查去
------------------------------------------- 睡覺 ----------------------------------------