概述
須要實現native跳轉到flutter 指定的路由頁面。git
iOS 工程中發現 FlutterViewController setInitialRouter 無效,在個人需求裏面是: 在iOS現有工程集成flutter項目,而後能夠跳轉到任意的 業務頁面。swift
在iOS 之中實例化頁面有兩種方式,以下:app
1. 經過全局統一的方式進行實例子化:(無效)
swift 代碼:less
@objc func handleButtonAction() { let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)! flutterViewController.setInitialRoute("test1") self.navigationController?.pushViewController(flutterViewController, animated: true) }
這種方式顯示效果最好,app 已啓動,就會直接加載數據,是我所須要的一種,渲染效果幾乎和native 一致,毫無違和感,交互很是流暢。ide
可是若是我想以前跳轉到指定頁面如:「test1」 路由頁面,卻發現不起做用;測試
二、經過全局統一pushrouter方式:(有效,效果差)
swift pushRouter:ui
@objc func handleButtonAction() { let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)! flutterViewController.pushRoute("test1") self.navigationController?.pushViewController(flutterViewController, animated: true) }
上面代碼雖然有效,可是效果不是很好,並且有明顯的push 狀態。因此不是咱們想要的spa
三、經過new FlutterViewController 方式設置(有效)
@objc func handleButtonAction2(){ let flutterViewController = FlutterViewController() flutterViewController.setInitialRoute("test1") self.navigationController?.pushViewController(flutterViewController, animated: true) }
有效,可是每次渲染都有一閃的效果,在交互上比native差一點。debug
四、flutter 路由代碼
class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter rokid', debugShowCheckedModeBanner: false,// 顯示和隱藏 theme: ThemeData( // This is the theme of your application. // // Try running your application with "flutter run". You'll see the // application has a blue toolbar. Then, without quitting the app, try // changing the primarySwatch below to Colors.green and then invoke // "hot reload" (press "r" in the console where you ran "flutter run", // or press Run > Flutter Hot Reload in a Flutter IDE). Notice that the // counter didn't reset back to zero; the application is not restarted. primarySwatch: Colors.blue, ), home: PlaygroundPage(title: '若琪實驗室'), routes: <String ,WidgetBuilder>{ "test": (_) => new PlaygroundPage(title: "我是內部路由測試test00",), "test1": (_) => new PlaygroundPage(title: "我是內部路由測試test01",) }, ); } }
參考資料:
https://www.gitmemory.com/issue/flutter/flutter/29554/492593645rest