Skip to content

Commit 9e32426

Browse files
add_local_asset_for_picture_marker_symbol (#58)
* catch exceptions while parsing and fix poliline on mobile * add missing return * implement feature * implement feature * add example on button click * add support for local asset android * add support for local asset android * fix logic * implement iOS * reformat * review * update README.md and add button for example only on mobile * fix ios build * resolve conflicts * reformat code --------- Co-authored-by: Julian Bissekkou <[email protected]>
1 parent 6dca8cd commit 9e32426

File tree

16 files changed

+242
-155
lines changed

16 files changed

+242
-155
lines changed

arcgis_map_sdk_android/android/src/main/kotlin/dev/fluttercommunity/arcgis_map_sdk_android/ArcgisMapPlugin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class ArcgisMapPlugin : FlutterPlugin {
88
.platformViewRegistry
99
.registerViewFactory(
1010
"<native_map_view>",
11-
ArcgisMapViewFactory(flutterPluginBinding.binaryMessenger)
11+
ArcgisMapViewFactory(flutterPluginBinding)
1212
)
1313
}
1414

arcgis_map_sdk_android/android/src/main/kotlin/dev/fluttercommunity/arcgis_map_sdk_android/ArcgisMapView.kt

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import android.content.Context
44
import android.view.LayoutInflater
55
import android.view.View
66
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
7-
import com.esri.arcgisruntime.geometry.Geometry
87
import com.esri.arcgisruntime.geometry.GeometryEngine
9-
import com.esri.arcgisruntime.geometry.Multipoint
108
import com.esri.arcgisruntime.geometry.Point
119
import com.esri.arcgisruntime.geometry.PointCollection
1210
import com.esri.arcgisruntime.geometry.Polyline
@@ -35,7 +33,7 @@ import dev.fluttercommunity.arcgis_map_sdk_android.model.LatLng
3533
import dev.fluttercommunity.arcgis_map_sdk_android.model.UserPosition
3634
import dev.fluttercommunity.arcgis_map_sdk_android.model.ViewPadding
3735
import dev.fluttercommunity.arcgis_map_sdk_android.util.GraphicsParser
38-
import io.flutter.plugin.common.BinaryMessenger
36+
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
3937
import io.flutter.plugin.common.EventChannel
4038
import io.flutter.plugin.common.MethodCall
4139
import io.flutter.plugin.common.MethodChannel
@@ -52,20 +50,21 @@ import kotlin.math.roundToInt
5250
internal class ArcgisMapView(
5351
private val context: Context,
5452
private val viewId: Int,
55-
private val binaryMessenger: BinaryMessenger,
5653
private val mapOptions: ArcgisMapOptions,
54+
private val binding: FlutterPluginBinding,
5755
) : PlatformView {
5856

5957
private val view: View = LayoutInflater.from(context).inflate(R.layout.vector_map_view, null)
6058
private var mapView: MapView
6159
private val map = ArcGISMap()
6260
private val defaultGraphicsOverlay = GraphicsOverlay()
61+
private val graphicsParser = GraphicsParser(binding)
6362

6463
private lateinit var zoomStreamHandler: ZoomStreamHandler
6564
private lateinit var centerPositionStreamHandler: CenterPositionStreamHandler
6665

6766
private val methodChannel =
68-
MethodChannel(binaryMessenger, "dev.fluttercommunity.arcgis_map_sdk/$viewId")
67+
MethodChannel(binding.binaryMessenger, "dev.fluttercommunity.arcgis_map_sdk/$viewId")
6968

7069
override fun getView(): View = view
7170

@@ -302,7 +301,7 @@ internal class ArcgisMapView(
302301
) {
303302
try {
304303
val map = call.arguments as Map<String, Any>
305-
val symbol = GraphicsParser.parseSymbol(map)
304+
val symbol = graphicsParser.parseSymbol(map)
306305
function(symbol)
307306
result.success(true)
308307
} catch (e: Throwable) {
@@ -315,16 +314,23 @@ internal class ArcgisMapView(
315314
zoomStreamHandler = ZoomStreamHandler()
316315
centerPositionStreamHandler = CenterPositionStreamHandler()
317316

318-
EventChannel(binaryMessenger, "dev.fluttercommunity.arcgis_map_sdk/$viewId/zoom")
317+
EventChannel(binding.binaryMessenger, "dev.fluttercommunity.arcgis_map_sdk/$viewId/zoom")
319318
.setStreamHandler(zoomStreamHandler)
320319

321-
EventChannel(binaryMessenger, "dev.fluttercommunity.arcgis_map_sdk/$viewId/centerPosition")
320+
EventChannel(
321+
binding.binaryMessenger,
322+
"dev.fluttercommunity.arcgis_map_sdk/$viewId/centerPosition"
323+
)
322324
.setStreamHandler(centerPositionStreamHandler)
323325
}
324326

325327
private fun onZoomIn(call: MethodCall, result: MethodChannel.Result) {
326328
if (mapView.mapScale.isNaN()) {
327-
result.error("Error", "MapView.mapScale is NaN. Maybe the map is not completely loaded.", null)
329+
result.error(
330+
"Error",
331+
"MapView.mapScale is NaN. Maybe the map is not completely loaded.",
332+
null
333+
)
328334
return
329335
}
330336

@@ -348,7 +354,11 @@ internal class ArcgisMapView(
348354

349355
private fun onZoomOut(call: MethodCall, result: MethodChannel.Result) {
350356
if (mapView.mapScale.isNaN()) {
351-
result.error("Error", "MapView.mapScale is NaN. Maybe the map is not completely loaded.", null)
357+
result.error(
358+
"Error",
359+
"MapView.mapScale is NaN. Maybe the map is not completely loaded.",
360+
null
361+
)
352362
return
353363
}
354364

@@ -396,7 +406,7 @@ internal class ArcgisMapView(
396406
val graphicArguments = call.arguments as Map<String, Any>
397407
lateinit var newGraphic: List<Graphic>
398408
try {
399-
newGraphic = GraphicsParser.parse(graphicArguments)
409+
newGraphic = graphicsParser.parse(graphicArguments)
400410
} catch (e: Throwable) {
401411
result.error("unknown_error", "Error while adding graphic. $e)", null)
402412
return
@@ -480,8 +490,9 @@ internal class ArcgisMapView(
480490
SpatialReferences.getWgs84()
481491
)
482492

483-
val future = if (padding != null) mapView.setViewpointGeometryAsync(polyline.extent, padding)
484-
else mapView.setViewpointGeometryAsync(polyline.extent)
493+
val future =
494+
if (padding != null) mapView.setViewpointGeometryAsync(polyline.extent, padding)
495+
else mapView.setViewpointGeometryAsync(polyline.extent)
485496

486497
future.addDoneListener {
487498
try {

arcgis_map_sdk_android/android/src/main/kotlin/dev/fluttercommunity/arcgis_map_sdk_android/ArcgisMapViewFactory.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@ package dev.fluttercommunity.arcgis_map_sdk_android
22

33
import android.content.Context
44
import dev.fluttercommunity.arcgis_map_sdk_android.model.ArcgisMapOptions
5-
import io.flutter.embedding.engine.FlutterEngine
6-
import io.flutter.plugin.common.BinaryMessenger
5+
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
76
import io.flutter.plugin.common.StandardMessageCodec
87
import io.flutter.plugin.platform.PlatformView
98
import io.flutter.plugin.platform.PlatformViewFactory
109

11-
class ArcgisMapViewFactory(private val binaryMessenger: BinaryMessenger) :
10+
class ArcgisMapViewFactory(private val flutterPluginBinding: FlutterPluginBinding) :
1211
PlatformViewFactory(StandardMessageCodec.INSTANCE) {
1312
override fun create(context: Context?, viewId: Int, args: Any?): PlatformView {
1413
val optionParams = args as Map<String, Any>
1514
val params = optionParams.parseToClass<ArcgisMapOptions>()
1615

17-
return ArcgisMapView(context!!, viewId, binaryMessenger, params)
16+
return ArcgisMapView(context!!, viewId, params, flutterPluginBinding)
1817
}
1918
}

arcgis_map_sdk_android/android/src/main/kotlin/dev/fluttercommunity/arcgis_map_sdk_android/model/symbol/PictureMarkerSymbolPayload.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.fluttercommunity.arcgis_map_sdk_android.model.symbol
22

33
data class PictureMarkerSymbolPayload(
4-
val url: String,
4+
val assetUri: String,
55
val width: Double,
66
val height: Double,
77
val xOffset: Int,

0 commit comments

Comments
 (0)