Flutter 2.8.0调试gradle报错:geolocator相关API已废弃
问题描述
运行基于Flutter 2.8.0版本的项目时,调试阶段因geolocator: 6.2.1出现编译错误,具体报错如下:
C:\Users\user\Downloads\flutter_windows_2.8.0-stable\flutter\.pub-cache\hosted\pub.dartlang.org\geolocator-6.2.1\android\src\main\java\com\baseflow\geolocator\location\LocationManagerClient.java:10: warning: [deprecation] LocationProvider in android.location has been deprecated import android.location.LocationProvider; ^ error: warnings found and -Werror specified C:\Users\user\Downloads\flutter_windows_2.8.0-stable\flutter\.pub-cache\hosted\pub.dartlang.org\geolocator-6.2.1\android\src\main\java\com\baseflow\geolocator\location\LocationMapper.java:29: warning: [deprecation] isFromMockProvider() in Location has been deprecated position.put("is_mocked", location.isFromMockProvider());
尝试升级geolocator至最新版本后,又出现其他适配错误。
解决方案
方案1:指定兼容Flutter 2.8.0的geolocator版本
Flutter 2.8.0属于旧版本,最新版geolocator通常要求更高的Flutter/Dart环境。可以选择既修复了废弃API问题、又兼容Flutter 2.8.0的版本,比如7.7.0。修改pubspec.yaml:
dependencies: geolocator: ^7.7.0
执行flutter pub get更新依赖。
方案2:修改Android编译配置,禁用警告转错误
报错核心是Android编译时开启了-Werror,将废弃API的警告直接判定为错误。可以通过修改gradle配置关闭该规则:
- 打开
android/app/build.gradle - 在
android代码块中添加如下配置:
android { // 保留原有配置,新增以下内容 lintOptions { abortOnError false // 禁用警告触发编译失败 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 compilerArgs << "-Xlint:-deprecation" // 忽略废弃API警告 } }
或者在android/gradle.properties中添加一行:
android.lintOptions.abortOnError=false
方案3:适配最新版geolocator的API(若坚持升级)
若升级后出现其他错误,通常是API调用方式或权限配置变更导致:
- 检查并修改代码中
geolocator的调用逻辑:比如新版中权限请求、定位方法的参数或返回值有变化,需替换为新版API(例如Geolocator.checkPermission()替代旧版权限检查方式)。 - 确认
AndroidManifest.xml中已添加必要权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- 查看
geolocator的版本说明,确认其与Flutter 2.8.0的兼容范围,若版本跨度太大,可能需要小幅升级Flutter版本(比如升级到2.10.x)以适配。
内容的提问来源于stack exchange,提问作者oyeleke Blessing
相关产品推荐
相关产品推荐

