概述
需要实现native跳转到flutter 指定的路由页面。
iOS 工程中发现 FlutterViewController setInitialRouter 无效,在我的需求里面是: 在iOS现有工程集成flutter项目,然后可以跳转到任意的 业务页面。
在iOS 之中实例化页面有两种方式,如下:
1. 通过全局统一的方式进行实例子化:(无效)
swift 代码:
@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 一致,毫无违和感,交互非常流畅。
但是如果我想之前跳转到指定页面如:“test1” 路由页面,却发现不起作用;
2、通过全局统一pushrouter方式:(有效,效果差)
swift pushRouter:
@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 状态。所以不是我们想要的
3、通过new FlutterViewController 方式设置(有效)
@objc func handleButtonAction2(){ let flutterViewController = FlutterViewController() flutterViewController.setInitialRoute("test1") self.navigationController?.pushViewController(flutterViewController, animated: true) }
有效,但是每次渲染都有一闪的效果,在交互上比native差一点。