Обновление положения маркера с изменением положения маркера Lat-Lng в плагине Google-Maps Flutter?

Я делаю приложение для администрирования отслеживания транспортных средств с помощью флаттера. Часть, в которой я застрял, обновляет положение маркера на карте только при изменении местоположения автомобиля. Для получения местоположения мы полагаемся на оборудование, и данные будут храниться в базе данных firestore, и с помощью streambuilder я могу получить местоположение из Firestone в приложение.

Глядя на код плагина, я обнаружил _updateMarkers() функция, но я понятия не имею, как реализовать это в приложении.

2 ответа

Решение

Я нашел способ после просмотра документации и кода плагина, он выглядит следующим образом

Обновите положение маркеров с помощью 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 класс.

Добавление к ответу Адитьи.

      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() не нужно.

Другие вопросы по тегам