Flutter Google Maps与CachedNetworkImage安卓模拟器运行异常求助
问题排查与解决步骤
Google Maps空白+平台视图未注册错误修复
- 确认API密钥配置位置正确:
<meta-data>标签必须放在AndroidManifest.xml的<application>标签内部,和<activity>标签同级,不要放在<manifest>根标签下。 - 手动注册Google Maps插件(修复自动注册失效问题):
打开android/app/src/main/kotlin/[你的包名路径]/MainActivity.kt,添加如下代码:
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.googlemaps.GoogleMapsPlugin class MainActivity: FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) flutterEngine.plugins.add(GoogleMapsPlugin()) } }
- 若开启了代码混淆,在
android/app/proguard-rules.pro中添加Google Maps混淆规则:
-keep class com.google.android.gms.maps.** { *; } -keep interface com.google.android.gms.maps.** { *; }
- 升级
google_maps_flutter到2.2.0以上稳定版本,当前使用的2.0.9版本存在已知安卓端平台视图注册BUG,升级后可直接修复。
CachedNetworkImage仅显示加载指示器修复
- 如果待加载图片是HTTP协议链接,安卓9及以上系统默认禁止明文流量访问,需在
AndroidManifest.xml的<application>标签添加属性:
android:usesCleartextTraffic="true"
- 升级
cached_network_image到3.2.0以上稳定版本,当前使用的3.1.0版本存在安卓端缓存逻辑BUG,升级后可解决加载卡住的问题。 - 可添加请求头绕过服务器的UA校验限制,代码示例:
ClipOval( child: CachedNetworkImage( imageUrl: userData.profileImage, httpHeaders: const {"User-Agent": "Mozilla/5.0 (Android 11; Mobile; rv:91.0) Gecko/91.0 Firefox/91.0"}, progressIndicatorBuilder: (context, url, downloadProgress) => CircularProgressIndicator(value: downloadProgress.progress), errorWidget: (context, url, error) => Icon(Icons.error), ), )
- 确认安卓模拟器可以正常访问图片链接,可在模拟器自带浏览器中打开图片地址测试,若使用国内模拟器需配置代理才可正常访问境外资源。
通用验证步骤
所有配置修改完成后执行以下命令重新构建应用:
flutter clean flutter pub get cd android && ./gradlew clean cd .. && flutter run
若模拟器测试仍有异常,可直接使用安卓真机测试,排除模拟器本身的网络、Google服务兼容缺陷。
内容的提问来源于stack exchange,提问作者Matt199
相关产品推荐
相关产品推荐

