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 插件显示空白地图