Flutter Google Maps 和 CachedNetworkImage 无法在 Android 模拟器上运行

Posted

技术标签:

【中文标题】Flutter Google Maps 和 CachedNetworkImage 无法在 Android 模拟器上运行【英文标题】:Flutter Google Maps and CachedNetworkImage not working on Android emulator 【发布时间】:2021-12-07 05:59:14 【问题描述】:

我正在为 android 模拟器上的 Google 地图和 CachedNetworkImage 的奇怪问题而苦苦挣扎。应用在 iPhone 模拟器上运行完美,但在 Android 模拟器上 CachedNetworkImage 和 Google Maps 无法正常运行。

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"/>

我确实添加了互联网权限:

  <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)

Very similar issue

我已经尝试了一切,但现在没有任何帮助。 再一次,一切都在 iOS 上完美运行,但在 Android 上却不行。 感谢您提供任何帮助! 马特

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Flutter Google Maps 和 CachedNetworkImage 无法在 Android 模拟器上运行的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中的 Google Maps Flutter 出错

google_maps_flutter 与 flutter_facebook_login 不兼容

Flutter - 如何删除单个 google_maps_flutter ^0.5.21 标记?

Flutter:如何在 google_maps_flutter 中为标记图标设置动画?

Flutter Geolocator 和 Google Maps:显示静态位置

如何为 google_maps_flutter 设置缩放级别