使用Flutter Geolocator包遇MissingPluginException,常规方案无效如何解决?
Flutter Geolocator 包 MissingPluginException 异常解决方案
以下是你执行过flutter clean、flutter pub get等常规操作无效后,可逐一验证的修复方案:
通用排查项
- 确认geolocator版本与本地Flutter SDK适配:Flutter 3.0及以上版本必须使用geolocator 9.0及以上版本,版本不兼容会直接导致插件通道注册失败
- 完全卸载调试设备上的现有App后重新编译运行:旧版App残留的插件缓存会导致新增插件的方法通道无法被识别
- 避免在应用初始化阶段直接调用定位方法:不要在
main.dart的initState刚触发时就调用定位接口,等待首帧渲染完成后再触发定位逻辑 - 开启了代码混淆的项目,在
android/app/proguard-rules.pro中添加geolocator免混淆规则:
-keep class com.baseflow.geolocator.** { *; }
Android 端专属排查项
- 确认
AndroidManifest.xml中已添加对应定位权限:
<!-- 基础定位权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 后台定位按需添加 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
- 确认
android/build.gradle中的kotlin版本不低于1.5.31,低版本kotlin无法兼容geolocator高版本的语法要求,会导致插件注册失败 - minSdkVersion低于21的项目需要开启Multidex支持,在
android/app/build.gradle中添加如下配置:
android { defaultConfig { ... multiDexEnabled true } } dependencies { implementation "androidx.multidex:multidex:2.0.1" }
iOS 端专属排查项
- 确认
ios/Runner/Info.plist中已添加定位权限说明:
<key>NSLocationWhenInUseUsageDescription</key> <string>应用需要获取定位信息以提供对应服务</string> <!-- 后台定位按需添加 --> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>应用后台运行时需要获取定位信息以提供对应服务</string>
- 清理Xcode构建缓存:打开Xcode执行
Product > Clean Build Folder,删除ios/Pods文件夹和ios/Podfile.lock后重新执行pod install - 确认iOS部署目标版本不低于12.0,geolocator 9.0及以上版本最低支持iOS 12.0,低版本部署目标会导致插件无法正常注册
内容的提问来源于stack exchange,提问作者Mr. Tayyab MuGhal
相关产品推荐
相关产品推荐

