2

我正在使用颤振制作车辆跟踪管理应用程序。我被卡住的部分只是在车辆位置发生变化时更新地图上的标记位置。为了获取我们依赖硬件的位置,数据将存储在 firestore 数据库中,并且使用流构建器,我能够从 Firestone 获取位置到应用程序。

在查看插件代码时,我发现了一个_updateMarkers()函数,但我不知道如何在应用程序中实现这个。

在此处输入图像描述

4

2 回答 2

1

添加到 Adithya 的答案。

import 'package:google_maps_flutter_platform_interface/src/types/marker_updates.dart';

    var updates = MarkerUpdates.from(
            Set<Marker>.from(markers), Set<Marker>.from(updatedMarkers));

    GoogleMapsFlutterPlatform.instance.updateMarkers(updates, mapId: mapId);

将 updateMarkers() 放入 setState() 是不必要的。

于 2022-01-22T15:59:20.663 回答
0

我在查看文档和插件代码后找到了方法,如下所示

使用类更新标记的位置MarkerUpdates。Google-Maps-Plugin 的文档中提到了相同的类。此类将两个 Set<Marker>作为输入,一个是当前标记集,另一个是新更新的标记集。这个类的文档在这里:https ://pub.dev/documentation/google_maps_flutter_platform_interface/latest/google_maps_flutter_platform_interface/MarkerUpdates-class.html

要使用此类,您必须添加以下导入语句: import 'package:google_maps_flutter_platform_interface/src/types/marker_updates.dart';

在执行此方法时,我的 google-maps 插件版本是 google_maps_flutter: ^0.5.29+1

然后制作如下函数:

List<Markers> markers; //This the list of markers is the old set of markers that were used in the onMapCreated function 

void upDateMarkers() {
  List<Markers> updatedMarkers =[]; //new markers with updated position go here 

  updatedMarkers =['updated the markers location here and also other properties you need.'];
  

  /// Then call the SetState function.
  /// I called the MarkersUpdate class inside the setState function.
  /// You can do it your way but remember to call the setState function so that the updated markers reflect on your Flutter app.
  /// Ps: I did not try the second way where the MarkerUpdate is called outside the setState buttechnically it should work.
  setState(() {
    MarkerUpdates.from(
        Set<Marker>.from(markers), Set<Marker>.from(updatedMarkers));
    markers = [];
    markers = updatedMarkers;
 //swap of markers so that on next marker update the previous marker would be the one which you updated now.
// And even on the next app startup, it takes the updated markers to show on the map.
  });
}

然后像我的情况一样定期调用该函数,或者按照您希望标记更新的方式调用该函数。

在这样做时发出警告,因为我被提升为警告: Don't import implementation files from another package.dartimplementation_imports

我不知道这是否是一种安全的方法,但它正在完成这项工作。如果有人能告诉我们更多关于警告的信息,如果它有可能产生错误,那就太好了。

笔记:

有一个类似的类来更新圆、多边形和选项(地图选项),文档已经解释了所有这些,并且这些类的导入在与Updatemarkers该类提到的相同路径中相似。

于 2020-08-13T09:34:38.160 回答