Flutter 3.0.2构建失败:audio_waveforms包引发Kotlin编译报错
问题原因
该编译错误由audio_waveforms 0.1.1版本Android端实现与Flutter 3.0+版本API不兼容导致。Flutter 3.0版本调整了PluginRegistry.RequestPermissionsResultListener接口中onRequestPermissionsResult方法的参数签名,旧版本插件中覆写的方法签名与新接口不匹配,因此编译器提示方法覆写无效、类未实现抽象接口成员。
你之前执行的重装依赖、flutter clean操作没有解决问题,是因为这些操作不会改变旧版本插件本身的代码逻辑。
解决方案
按优先级从高到低选择以下方案即可:
方案1:升级插件到兼容版本(推荐)
- 打开项目根目录下的
pubspec.yaml文件,将audio_waveforms的依赖版本修改为^0.1.5(该及以上官方版本已完成Flutter 3.0适配,修复了此签名不匹配问题) - 保存文件后在项目根目录执行命令拉取新依赖:
flutter pub get - 重新执行构建命令即可正常编译。
- 打开项目根目录下的
方案2:本地临时修复(无法升级依赖时使用)
如果项目存在其他兼容限制无法升级插件版本,可直接修改本地Pub缓存中的插件代码临时修复:- 打开报错信息中提示的文件:
/Users/baw/flutter/.pub-cache/hosted/pub.dartlang.org/audio_waveforms-0.1.1/android/src/main/kotlin/com/simform/audio_waveforms/AudioRecorder.kt - 定位到第97行附近的
onRequestPermissionsResult方法,将方法签名修改为Flutter 3.0要求的格式,方法内部原有逻辑全部保留,仅修改方法头:override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ): Boolean { // 此处保留原方法内的所有代码不要修改 } - 保存文件后回到项目根目录执行
flutter clean,重新构建即可。
注意:该方案修改的是Pub全局缓存中的文件,执行
flutter pub cache repair、切换开发设备重新拉取依赖时修改会失效,优先选择升级依赖的方案。- 打开报错信息中提示的文件:
方案3:强制覆盖依赖版本
如果项目中有其他间接依赖锁定了旧版audio_waveforms,可在pubspec.yaml末尾添加覆盖配置强制使用兼容版本:dependency_overrides: audio_waveforms: ^0.1.5保存后执行
flutter pub get拉取依赖,再重新构建即可。
内容的提问来源于stack exchange,提问作者Tonny Bawembye
相关产品推荐
相关产品推荐

