ios工程接入flutter_boost

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文件
  1. 执行 pod init
  2. 执行 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中初始化

  • 删除不必要的文件
    1. 删除SceneDelegate文件
    2. application删除和scene相关的方法
    3. 删除Main.storyboard文件 和 LaunchScreen.storyboard文件
    4. 工程-> TARGETS -> Info.plist中 删除Main storyboard file base name
    5. 改造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页面

  1. 添加一个调试按钮
    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)
    
  2. 添加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)
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容