Обновление положения маркера с изменением положения маркера 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() не нужно.