flutter module创建
- 参考文档 ,创建module工程
- 引入boost插件
在pubspec.yaml文件中的dependencies下添加:flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: '4.2.0'
- build module工程
需要先把module工程build一次,因为不需要添加开发团队,所以执行 flutter build ios --no-codesign 命令即可
podfile文件添加配置
- 创建Podfile文件
- 执行 pod init
- 执行 pod install
- 在文件中(通常是platform下面)添加以下代码
flutter_application_path = '../flutter_module' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
- 在每个target中添加
install_all_flutter_pods(flutter_application_path)
- 文件最底部,添加
**post_install do |installer|** **flutter_post_install(installer) if defined?(flutter_post_install)** **end**
- 执行pod install
AppDelegate中初始化
- 删除不必要的文件
- 删除SceneDelegate文件
- application删除和scene相关的方法
- 删除Main.storyboard文件 和 LaunchScreen.storyboard文件
- 工程-> TARGETS -> Info.plist中 删除Main storyboard file base name
- 改造AppDelegate
window = UIWindow(frame: UIScreen.main.bounds) let navigationViewController = UINavigationController(rootViewController: ViewController()) window?.backgroundColor = .white window?.rootViewController = navigationViewController window?.makeKeyAndVisible()
- 自定义FlutterBoostDelegate方法,一共复写三个方法
class BoostDelegate: NSObject,FlutterBoostDelegate { ///您用来push的导航栏 var navigationController:UINavigationController? ///用来存返回flutter侧返回结果的表 var resultTable:Dictionary<String,([AnyHashable:Any]?)->Void> = [:]; func pushNativeRoute(_ pageName: String!, arguments: [AnyHashable : Any]!) { } func pushFlutterRoute(_ options: FlutterBoostRouteOptions!) { } func popRoute(_ options: FlutterBoostRouteOptions!) { } }
- 初始化flutter_boost引擎
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions 方法中添加//创建代理,做初始化操作 let delegate = BoostDelegate() delegate.navigationController = navigationViewController FlutterBoost.instance().setup(application, delegate: delegate, callback: { engine in // 这里是FlutterBoost回调方法,另写它处 self.pushFlutterHomeNative() })
简单引用实例
native调整至flutter页面
- 添加一个调试按钮
let button: UIButton = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 30)) button.addTarget(self, action: #selector(gotoNext), for: .touchUpInside) button.setTitle("点击测试", for: .normal) button.setTitleColor(.white, for: .normal) button.backgroundColor = .orange view.addSubview(button)
- 添加flutter_boost跳转方法
@objc func gotoNext(_ button: UIButton) -> Void { let options = FlutterBoostRouteOptions() options.pageName = "/main/mainPage" options.arguments = ["name": "xiao bai", "age": 18] //页面是否透明(用于透明弹窗场景),若不设置,默认情况下为true options.opaque = true //这个是push操作完成的回调,而不是页面关闭的回调!!!! options.completion = { completion in print("open operation is completed") } //这个是页面关闭并且返回数据的回调,回调实际需要根据您的Delegate中的popRoute来调用 options.onPageFinished = { dic in debugPrint(dic as Any) } FlutterBoost.instance().open(options) }