美文网首页
四:Flutter与原生iOS混编

四:Flutter与原生iOS混编

作者: 物非0人非 | 来源:发表于2023-07-08 11:50 被阅读0次
一: 官方建议使用pod方法引入,因此我也采用pod方法引用
二: 现有的原生项目迁入flutter工程,不建议使用Android Studio或者VSCode创建,因为尝试创建后发现.iOS/Flutter目录缺少podhelper.rb脚本命令,会导致配置完pod引入后报错
三: 建议使用命令行创建()
flutter create --template module my_flutter

其中 my_flutter为定义的flutter工程名 这里我定义为bf_flutter_project

四: 使用命令行创建完后 在指定目录下生成的flutter工程目录如下
image.png
五: 经过调研对比 Android StudioVSCode都可以开发flutter项目,但是个人建议使用Android Studio,真机调试或者log控制台以及智能提示Android Studio都有较大优势,极其好用
六: flutter项目创建完毕后,那接下来原生项目配置通过pod接入flutter项目,podfile配置如下:
// flutter_application_path 是flutter 工程的项目路径
flutter_application_path = '../../bf_flutter_project/bf_flutter_project'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
end

install_all_flutter_pods(flutter_application_path)

pod 目录上面配置路径 下面配置对路径的引用 如图所示:

image.png
七: 执行即可
pod update --verbose --no-repo-update
八: 执行完毕后 pod目录下会引入flutter1.0FlutterPluginRegistrant如图:
image.png
九: 接入完毕后 编译下编辑成功后就可以愉快的玩耍了, 使用flutter
①: 在`AppDelegate`中导入头文件 
import FlutterPluginRegistrant
import Flutter

②: 初始化`Flutter `引擎
public lazy var flutterEngine:FlutterEngine = {
        let flutterEngine = FlutterEngine(name: "SDDailyStudyProject")
///iOS这个好像没啥用,只针对安卓来获取对应的context
        GeneratedPluginRegistrant.register(with: flutterEngine)
        return flutterEngine
    }()

③: 启动` Flutter `引擎 这里 第一次初始化后可能会内存增加 ,官方暂时为优化这块 启动的时机 可做优化
flutterEngine.run()

④ : 这里在`AppDelegate `中提供一个类方法 来方便获取获取`flutterEngine` 方便后续的使用
public class func getFlutterEngine() -> FlutterEngine{
        return  (UIApplication.shared.delegate as!AppDelegate).flutterEngine
    }
十: flutter初始化完毕后,加载flutter页面,使用Android Studio开发一个列表页面 代码如下:
image.png
image.png
`ListView` 类似` iOS`中的`UITableView itemCount `类似为 数据源方法 返回多少个`cel`l,  `itemBuilder`
类似为 数据源中的返回的`cell`,并且在`main`函数中配置路由映射
routes: ({"/list":(cxt){
  return HomeList();
}}), 
如上图所示:
十一: 这里就可以启动原生项目了,编写加载flutter的代码
image.png
十二: 展示演示如下 (ps:每次编写完flutter代码可以直接运行,加载即可看见效果)
image.png
十三: 关于热调试 保证XcodeAndroid Stuido选中后同一个设备,在Android Stuido的命令行中执行flutter attach 更改flutter代码后 在控制台按 小r或者大R即可实现实时更新,不用重新运行设备
image.png

附件:

flutter项目地址:
http://172.16.117.224/zhouzunxian02/bf_flutter_project.git 

跟主工程放同级目录即可, 主工程切换到feature/daily/380-flutter
执行pod update --verbose --no-repo-update
报错:

[!] Invalid `Podfile` file: cannot load such file -- /Users/lanlan/development/flutter/packages/flutter_tools/bin/podhelper.

解决:

cd到flutter工程目录下: 
cd /Users/jh/Desktop/SDProject/bf_flutter_project/bf_flutter_project

1、执行:flutter clean
2、执行:flutter pub upgrade

然后cd到主工程下:

3、宿主项目中,直接pod install
4、然后再去 clear 主工程 和 清理DerivedData下面的缓存。再执行:
pod update --verbose --no-repo-update
即可。

相关文章

网友评论

      本文标题:四:Flutter与原生iOS混编

      本文链接:https://www.haomeiwen.com/subject/mexgqdtx.html