VietmapController constructor
VietmapController({
- required VietmapGlPlatform vietmapGLPlatform,
- required CameraPosition initialCameraPosition,
- required Iterable<
AnnotationType> annotationOrder, - required Iterable<
AnnotationType> annotationConsumeTapEvents, - OnStyleLoadedCallback? onStyleLoadedCallback,
- OnMapClickCallback? onMapClick,
- OnMapLongClickCallback? onMapLongClick,
- OnAnnotationUpdate? onAnnotationUpdate,
- OnDidFinishedRenderingFrame? onDidFinishedRenderingFrame,
- OnCameraTrackingDismissedCallback? onCameraTrackingDismissed,
- OnCameraTrackingChangedCallback? onCameraTrackingChanged,
- OnMapIdleCallback? onMapIdle,
- OnMapRenderedCallback? onMapRendered,
- OnMapRenderedCallback? onMapFirstRendered,
- OnUserLocationUpdated? onUserLocationUpdated,
- OnCameraIdleCallback? onCameraIdle,
- OnCameraMoveCallback? onCameraMove,
Implementation
VietmapController({
required VietmapGlPlatform vietmapGLPlatform,
required CameraPosition initialCameraPosition,
required Iterable<AnnotationType> annotationOrder,
required Iterable<AnnotationType> annotationConsumeTapEvents,
this.onStyleLoadedCallback,
this.onMapClick,
this.onMapLongClick,
this.onAnnotationUpdate,
this.onDidFinishedRenderingFrame,
//this.onAttributionClick,
this.onCameraTrackingDismissed,
this.onCameraTrackingChanged,
this.onMapIdle,
this.onMapRendered,
this.onMapFirstRendered,
this.onUserLocationUpdated,
this.onCameraIdle,
this.onCameraMove,
}) : _vietmapGLPlatform = vietmapGLPlatform {
_cameraPosition = initialCameraPosition;
var isFirstRenderedCalled = false;
// _vietmapGLPlatform.onAnnotationUpdate.add((data) {
// onAnnotationUpdate?.call(data);
// });
// _vietmapGLPlatform.onDidFinishedRenderingFrame.add((_) {
// onDidFinishedRenderingFrame?.call();
// });
_vietmapGLPlatform.onFeatureTappedPlatform.add((payload) {
for (final fun
in List<OnFeatureInteractionCallback>.from(onFeatureTapped)) {
fun(payload["id"], payload["point"], payload["latLng"],
payload["layerId"]);
}
});
// _vietmapGLPlatform.onDidFinishedRenderingFrame.add((_) {
// onDidFinishedRenderingFrame?.call();
// });
_vietmapGLPlatform.onMapRenderedPlatform.add((_) {
onMapRendered?.call();
if (onMapFirstRendered != null && !isFirstRenderedCalled) {
onMapFirstRendered!();
isFirstRenderedCalled = true;
}
});
_vietmapGLPlatform.onFeatureDraggedPlatform.add((payload) {
for (final fun in List<OnFeatureDragnCallback>.from(onFeatureDrag)) {
final enmDragEventType = DragEventType.values
.firstWhere((element) => element.name == payload["eventType"]);
fun(payload["id"],
point: payload["point"],
origin: payload["origin"],
current: payload["current"],
delta: payload["delta"],
eventType: enmDragEventType);
}
});
_vietmapGLPlatform.onFeatureHoverPlatform.add((payload) {
final eventType = HoverEventType.values
.firstWhere((element) => element.name == payload["eventType"]);
for (final fun in List<OnFeatureHoverCallback>.from(onFeatureHover)) {
fun(payload["id"], payload["point"], payload["latLng"],
payload["layerId"], eventType);
}
});
_vietmapGLPlatform.onCameraMoveStartedPlatform.add((_) {
_isCameraMoving = true;
if (!isDisposed) notifyListeners();
});
_vietmapGLPlatform.onCameraMovePlatform.add((cameraPosition) {
_cameraPosition = cameraPosition;
onCameraMove?.call(cameraPosition);
if (!isDisposed) notifyListeners();
});
_vietmapGLPlatform.onCameraIdlePlatform.add((cameraPosition) {
_isCameraMoving = false;
if (cameraPosition != null) {
_cameraPosition = cameraPosition;
}
onCameraIdle?.call();
if (!isDisposed) notifyListeners();
});
_vietmapGLPlatform.onMapStyleLoadedPlatform.add((_) async {
// Dispose the managers of the previous style before re-creating them.
// Their layers/sources are already gone with the old style, so the
// removeLayer/removeSource calls inside dispose() may throw - what
// matters here is that each manager de-registers its tap/drag
// callbacks. Without this the controller accumulates callbacks from
// every style load, and stale managers keep resolving ids against an
// already cleared annotation map.
try {
await polygonManager?.dispose();
} catch (_) {}
polygonManager = null;
try {
await polylineManager?.dispose();
} catch (_) {}
polylineManager = null;
try {
await circleManager?.dispose();
} catch (_) {}
circleManager = null;
try {
await symbolManager?.dispose();
} catch (_) {}
symbolManager = null;
final interactionEnabled = annotationConsumeTapEvents.toSet();
for (final type in annotationOrder.toSet()) {
final enableInteraction = interactionEnabled.contains(type);
switch (type) {
case AnnotationType.polygon:
polygonManager = PolygonManager(this,
onTap: onPolygonTapped.call,
enableInteraction: enableInteraction);
case AnnotationType.line:
polylineManager = PolylineManager(this,
onTap: onPolylineTapped.call,
enableInteraction: enableInteraction);
case AnnotationType.circle:
circleManager = CircleManager(this,
onTap: onCircleTapped.call,
enableInteraction: enableInteraction);
case AnnotationType.symbol:
symbolManager = SymbolManager(this,
onTap: onSymbolTapped.call,
enableInteraction: enableInteraction);
}
}
onStyleLoadedCallback?.call();
});
_vietmapGLPlatform.onMapClickPlatform.add((dict) {
onMapClick?.call(dict['point'], dict['latLng']);
});
_vietmapGLPlatform.onMapLongClickPlatform.add((dict) {
onMapLongClick?.call(dict['point'], dict['latLng']);
});
_vietmapGLPlatform.onCameraTrackingChangedPlatform.add((mode) {
onCameraTrackingChanged?.call(mode);
});
_vietmapGLPlatform.onCameraTrackingDismissedPlatform.add((_) {
onCameraTrackingDismissed?.call();
});
_vietmapGLPlatform.onMapIdlePlatform.add((_) {
onMapIdle?.call();
});
_vietmapGLPlatform.onUserLocationUpdatedPlatform.add((location) {
onUserLocationUpdated?.call(location);
});
}