Skip to content

Commit 1448144

Browse files
committed
Fix location indicator example
1 parent 40f5cef commit 1448144

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

arcgis_map_sdk_ios/ios/arcgis_map_sdk_ios/Sources/arcgis_map_sdk_ios/ArcgisMapView.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class ArcgisMapView: NSObject, FlutterPlatformView {
112112
private func setupMethodChannel() {
113113
methodChannel.setMethodCallHandler({ [self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
114114
switch (call.method) {
115+
case "on_init_complete": waitForViewToInit(call, result)
115116
case "zoom_in": onZoomIn(call, result)
116117
case "zoom_out": onZoomOut(call, result)
117118
case "rotate" : onRotate(call, result)
@@ -142,6 +143,16 @@ class ArcgisMapView: NSObject, FlutterPlatformView {
142143
}
143144
})
144145
}
146+
147+
private func waitForViewToInit(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) {
148+
if mapContentView.viewModel.mapViewProxy != nil {
149+
result(true)
150+
} else {
151+
mapContentView.viewModel.onViewInit = { [weak self] in
152+
result(true)
153+
}
154+
}
155+
}
145156

146157
private func onZoomIn(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) {
147158
let currentScale = mapContentView.viewModel.viewpoint.targetScale

arcgis_map_sdk_ios/ios/arcgis_map_sdk_ios/Sources/arcgis_map_sdk_ios/MapContentView.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct MapContentView: View {
4242
.task {
4343
// Store the mapViewProxy for external access
4444
viewModel.mapViewProxy = mapViewProxy
45+
viewModel.onViewInit?();
4546
}
4647
.onDisappear {
4748
viewModel.stopLocationDataSource()
@@ -68,6 +69,7 @@ class MapViewModel: ObservableObject {
6869
var onScaleChanged: ((Double) -> Void)?
6970
var onVisibleAreaChanged: ((Polygon) -> Void)?
7071
var onLoadStatusChanged: ((LoadStatus) -> Void)?
72+
var onViewInit: (() -> Void)?
7173

7274
init(viewpoint : Viewpoint) {
7375
self.viewpoint = viewpoint

arcgis_map_sdk_method_channel/lib/src/method_channel_arcgis_map_plugin.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:io';
2+
13
import 'package:arcgis_map_sdk_method_channel/src/model_extension.dart';
24
import 'package:arcgis_map_sdk_platform_interface/arcgis_map_sdk_platform_interface.dart';
35
import 'package:flutter/services.dart';
@@ -14,7 +16,11 @@ class MethodChannelArcgisMapPlugin extends ArcgisMapPlatform {
1416

1517
/// This method is called when the plugin is first initialized.
1618
@override
17-
Future<void> init(int mapId) async {}
19+
Future<void> init(int mapId) async {
20+
if (Platform.isIOS) {
21+
return _methodChannelBuilder(mapId).invokeMethod('on_init_complete');
22+
}
23+
}
1824

1925
@override
2026
Future<FeatureLayer> addFeatureLayer(

example/lib/location_indicator_example_page.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,6 @@ class _LocationIndicatorExamplePageState
135135
await Geolocator.requestPermission();
136136
final location = await Geolocator.getLastKnownPosition();
137137
if (!mounted || location == null) return;
138-
// Small delay to let the map render before moving the camera
139-
await Future.delayed(Duration(milliseconds: 500));
140138
await _controller!.moveCamera(
141139
point: LatLng(location.latitude, location.longitude),
142140
zoomLevel: 16,
@@ -167,6 +165,7 @@ class _LocationIndicatorExamplePageState
167165

168166
Future<void> _switchLocationSource() async {
169167
await _controller!.locationDisplay.stopSource();
168+
_isStarted = false;
170169
await _controller!.setLocationDisplay(
171170
_isManualLocationSource
172171
? ArcgisLocationDisplay()

0 commit comments

Comments
 (0)