Flutter集成ArCore插件编译报错:Activity?与Activity类型不匹配
解决ArCore Flutter插件编译错误的方案
一、修改插件源码修复类型不匹配问题
报错核心是ArcoreFlutterPlugin.kt第32行的空安全类型不兼容——代码期望非空的Activity,但传入的是可空的Activity?。按以下步骤修改:
- 找到本地插件缓存路径:
C:\Flutter\flutter_windows_3.3.1-stable\flutter.pub-cache\hosted\pub.dartlang.org\arcore_flutter_plugin-0.0.11\android\src\main\kotlin\com\difrancescogianmarco\arcore_flutter_plugin\ArcoreFlutterPlugin.kt - 定位到报错行,将可空的
activity转为非空实例:- 如果原代码是直接传入
activity,改成用!!强制非空(仅确认activity不会为空时用):// 示例:原代码 ArCoreView(activity, ...) val arCoreView = ArCoreView(activity!!, registrar.messenger(), this) - 更安全的写法是用空判断:
activity?.let { nonNullActivity -> val arCoreView = ArCoreView(nonNullActivity, registrar.messenger(), this) // 后续初始化逻辑 }
- 如果原代码是直接传入
- 同步调整
ArCoreView.kt的适配逻辑:如果ArCoreView的构造函数要求非空Activity,确保调用时传入的是经过空校验的实例,而不是只修改onActivityCreated的参数声明。
二、更换兼容的插件版本
arcore_flutter_plugin:0.0.11版本较老,和Flutter 3.3.1的Kotlin空安全规则不兼容,推荐尝试:
- 升级到
0.0.14版本:在项目pubspec.yaml中修改依赖为arcore_flutter_plugin: ^0.0.14,执行flutter pub get后重新编译 - 若官方版本仍有问题,可寻找社区维护的分支版本(优先选择最近有提交记录的fork)
三、替代方案
- 改用官方维护的AR插件:直接使用Google官方推出的Flutter ARCore插件,兼容性和稳定性更有保障
- 对齐Kotlin版本:在项目
android/build.gradle中确保Kotlin版本与Flutter 3.3.1兼容,推荐设置为1.6.21:buildscript { ext.kotlin_version = '1.6.21' // 其他配置项 }
内容的提问来源于stack exchange,提问作者anne17732
相关产品推荐
相关产品推荐

