google_maps_flutter - 自定义标记图标:无法启用 MyLocation 图层,因为未授予位置权限

Posted

技术标签:

【中文标题】google_maps_flutter - 自定义标记图标:无法启用 MyLocation 图层,因为未授予位置权限【英文标题】:google_maps_flutter - Custom Marker Icons: Cannot enable MyLocation layer as location permissions are not granted 【发布时间】:2021-07-19 14:59:54 【问题描述】:

我正在使用 google_maps_flutter 并想使用自定义标记图标(基于类别,我想使用不同的图标)。

代码

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

pubspec.yaml google_maps_flutter: ^1.0.6

Maps_view.dart

HashMap bitmaps = new HashMap<String, BitmapDescriptor>();

@override
  void initState() 
    super.initState();
    _createBitMaps();
  

  void _createBitMaps() 
    List<String> cats = categories; // List of categories
    // Based on the category, I want to choose a different asset. The name of the asset and the name of the category are for this reason the same. 
    for (String cat in cats) 
      BitmapDescriptor.fromAssetImage(
        ImageConfiguration(size: Size(48, 48)), 'lib/assets/categorie_icons_location/' + cat + '.png').then((onValue) 
          setState(() => bitmaps[cat] = onValue);
        
      );
    
  
...
_markers.add(
                       Marker(
                         markerId: MarkerId('_' + docs[i]['title'] + '_' + docs[i]['latitude'] + '_' + docs[i]['longitude']),
                         position: LatLng(double.parse(docs[i]['latitude']), double.parse(docs[i]['longitude'])),
                         // Use custom icon based on 'category' (from a firebase document) 
                         icon: bitmaps[docs[i]['category']],
                         infoWindow: InfoWindow(
                           title: docs[i]['title'],
                           snippet: docs[i]['street'],
                           onTap: () 
                         )
                       )
                     );

错误

当我启动我的应用程序时出现以下错误: Cannot enable MyLocation layer as location permissions are not granted

注意

只要我用自定义图标注释代码,我的应用就会完美运行。

【问题讨论】:

【参考方案1】:

您可能使用了错误的 Android Manifest.xml。请查看此答案:

https://***.com/a/67121766/11708327

【讨论】:

【参考方案2】:

我的日志中有相同的错误消息。经过一番混乱,我得到了一个不同的错误:

com.google.maps.api.android.lib6.common.apiexception.b: Failed to decode image. The provided image must be a Bitmap

我在 pubspec.yaml 中添加了一个 assets 节:

assets:
    - assets/

现在两个错误都已修复。 见Adding assets and images

“Muddling”主要涉及异步函数的排序和调用,以获取我的标记位置和 fromAssetImage(),包括 await/.then 以及在 initState() 和 Widget Build() 之间更改异步函数。我怀疑执行顺序会影响调用的实际异常。

【讨论】:

以上是关于google_maps_flutter - 自定义标记图标:无法启用 MyLocation 图层,因为未授予位置权限的主要内容,如果未能解决你的问题,请参考以下文章

Flutter/Dart 为 Google Maps Marker 添加自定义点击事件

如何为 google_maps_flutter 设置缩放级别

从 google_maps_flutter 中删除多余的标记和圆圈

谷歌地图使用 google_maps_flutter 插件显示空白地图

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

google_maps_flutter 与 flutter_facebook_login 不兼容