【问题标题】:How to set or remove map markers in dart/flutter如何在飞镖/颤振中设置或删除地图标记
【发布时间】:2021-10-23 11:01:39
【问题描述】:

我正在尝试根据用户在 Firebase 中的“活动”状态在地图小部件上放置和删除标记:

Map <MarkerId, Marker> markers = <MarkerId, Marker>{};
.
.
.
markerStream.listen((List<DocumentSnapshot> documentList) {

  documentList.forEach((DocumentSnapshot document) {

    bool activeField = (document.data() as dynamic)['active'];   
    final GeoPoint point = (document
        .data() as dynamic)['position']['geopoint'];
    final uid = (document.data() as dynamic)['uid'].toString();

    //if field 'active' in firebase is set to true or false

    activeField == true ? _addMarker(point.latitude, point.longitude, uid) 
    :  _removeMarker(uid);
   });
}

删除方法:

_removeMarker( String uid) {
    
// checks uid is in markers.values map, if there, remove from collection , if not, 
//I need a way to put continue or ignore in the `orElse` parameter instead of null, because the markerId cannot be null:

    Marker? _markers = markers.values.firstWhere(
              (thisMarker) => thisMarker.markerId.value == uid ,
              orElse: () => null);

    setState(() {
      markers.remove(_marker);
    });
      }

当我省略 orElse 参数时,此代码运行。如果 firebase 中的所有条目在运行时都设置为 true,则会出现标记,并且在切换为 false 时会消失。问题是当条目在运行之前已经处于“假”状态时,会导致错误元素错误,因为它仍未存储在集合中。或者从 true 切换回 false 不会从地图小部件中删除标记。

【问题讨论】:

    标签: flutter dart marker


    【解决方案1】:

    我安装并导入了package:collection 使用.firstWHereOrNull 并添加.markerIdin 作为键(我忘记了)

    Marker? _marker = markers.values.firstWhereOrNull(
                (Marker thisMarker) => thisMarker.markerId.value == uid );
        
        markers.remove(_marker!.markerId);
        setState(() {
    
        });
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2021-07-27
      • 2020-11-19
      • 2021-11-23
      • 2020-08-12
      • 2020-11-05
      • 2020-11-28
      相关资源
      最近更新 更多