Flutter Google Maps和CachedNetworkImage不能在Android模拟器上工作



我正在努力解决Android模拟器上谷歌地图和CachedNetworkImage的奇怪问题。应用程序在iPhone模拟器上工作完美,但在Android模拟器上CachedNetworkImage和谷歌地图不能正常工作。

  • CachedNetworkImage显示CircularProgressIndicator,但不加载图像。此外,图片大小不超过40k。
  • 带有GoogleMaps的小部件显示空屏幕并打印错误到控制台。

我为Android和iOS激活了Google Maps API。我确实在AndroidManifest.xml中添加了Android的API,在AppDelegate.swift中添加了iOS的API。我的计费帐户是活动的(我还创建了不同的API KEY,但结果相同):

<meta-data android:name="com.google.android.geo.API_KEY" android:value="MY_API_KEY_FOR_ANDROID"/>

I did add permission for internet:

<uses-permission android:name="android.permission.INTERNET" />

我已经运行了几次

flutter clean 
flutter run 

我从模拟器重新安装了应用程序。

  • MinSdkVersion设置为24
  • compileSdkVersion设置为30

这是我的MapWidget:

import 'dart:async';
import 'package:duty/models/announcement.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class OrderMapWidget extends StatelessWidget {
final Announcement announcement;
OrderMapWidget({required this.announcement});
@override
Widget build(BuildContext context) {
final CameraPosition position = CameraPosition(
target: LatLng(announcement.address.geoloc.latitude,
announcement.address.geoloc.longitude),
zoom: 9,
);
Set<Circle> _circle = Set.from([
Circle(
circleId:
CircleId(('circle_id_${DateTime.now().millisecondsSinceEpoch}')),
center: LatLng(announcement.address.geoloc.latitude,
announcement.address.geoloc.longitude),
radius: 8000,
strokeWidth: 2,
strokeColor: Theme.of(context).accentColor,
fillColor: Theme.of(context).accentColor.withAlpha(20),
)
]);
return Container(
height: 120,
child: GoogleMap(
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller) {},
compassEnabled: false,
myLocationEnabled: false,
myLocationButtonEnabled: false,
initialCameraPosition: position,
onCameraMove: null,
circles: _circle,
zoomGesturesEnabled: false,
tiltGesturesEnabled: false,
scrollGesturesEnabled: false,
rotateGesturesEnabled: false,
),
);
}
}

和我的CachedNetworkImage:

ClipOval(
child: CachedNetworkImage(
imageUrl: userData.profileImage,
progressIndicatorBuilder: (context, url, downloadProgress) =>
CircularProgressIndicator(value: downloadProgress.progress),
errorWidget: (context, url, error) => Icon(Icons.error),
),
),

我pubspec.yaml:

version: 1.0.0+1
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
intl: ^0.17.0
cloud_firestore: ^2.5.3
firebase_auth: ^3.1.3
firebase_core: ^1.7.0
flutter_google_places: ^0.3.0
google_maps_flutter: ^2.0.9
uuid: ^3.0.4
geocoding: ^2.0.1
cupertino_icons: ^1.0.2
cached_network_image: ^3.1.0

我尝试使用不同的模拟器。在Android上使用GoogleMaps时的错误如下:

E/flutter (15357): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: 
Trying to create a platform view of unregistered type: plugins.flutter.io/google_maps
E/flutter (15357):  at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:192)

非常相似的问题

我什么都试过了,但都没用。再一次,iOS上的一切都很完美,但在Android上却并非如此。谢谢你的帮助!马特

好的,我查看了所有的依赖项,似乎flutter_facebook_auth正在解决问题。奇怪的是,但移除flutter_facebook_auth后,一切似乎都在工作。Google Maps和CachedNetworkImage现在正常工作了。我有最新版本的flutter_facebook_auth,我试图降级,但它仍然导致问题。只有移除这个依赖项才能解决我的问题。奇怪…