fix(mobile): debounce map layer update (#6861)

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2024-02-05 03:07:08 +00:00 committed by GitHub
parent f4ab5d3ff7
commit 1d93889920
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 1 deletions

View file

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:math';
import 'package:flutter/services.dart';
@ -6,6 +7,8 @@ import 'package:immich_mobile/modules/map/utils/map_utils.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
extension MapMarkers on MaplibreMapController {
static var _completer = Completer()..complete();
Future<void> addGeoJSONSourceForMarkers(List<MapMarker> markers) async {
return addSource(
MapUtils.defaultSourceId,
@ -16,6 +19,12 @@ extension MapMarkers on MaplibreMapController {
}
Future<void> reloadAllLayersForMarkers(List<MapMarker> markers) async {
// Wait for previous reload to complete
if (!_completer.isCompleted) {
return _completer.future;
}
_completer = Completer();
// !! Make sure to remove layers before sources else the native
// maplibre library would crash when removing the source saying that
// the source is still in use
@ -36,6 +45,8 @@ extension MapMarkers on MaplibreMapController {
MapUtils.defaultHeatMapLayerId,
MapUtils.defaultHeatMapLayerProperties,
);
_completer.complete();
}
Future<Symbol?> addMarkerAtLatLng(LatLng centre) async {