diff --git a/toolkit/geo-compose/src/main/java/com/arcgismaps/toolkit/geocompose/Map.kt b/toolkit/geo-compose/src/main/java/com/arcgismaps/toolkit/geocompose/Map.kt index 3f8c2441f..8541fcad7 100644 --- a/toolkit/geo-compose/src/main/java/com/arcgismaps/toolkit/geocompose/Map.kt +++ b/toolkit/geo-compose/src/main/java/com/arcgismaps/toolkit/geocompose/Map.kt @@ -20,7 +20,10 @@ package com.arcgismaps.toolkit.geocompose import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner @@ -30,12 +33,14 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.viewinterop.AndroidView import com.arcgismaps.mapping.ArcGISMap import com.arcgismaps.mapping.view.MapView +import kotlinx.coroutines.launch /** * A compose equivalent of the [MapView]. * * @param modifier Modifier to be applied to the Map * @param arcGISMap the [ArcGISMap] to be rendered by this composable + * @param onViewpointChanged lambda invoked when the viewpoint of the Map has changed * @param overlay the composable overlays to display on top of the Map. Example, a compass, floorfilter etc. * @since 200.3.0 */ @@ -43,6 +48,7 @@ import com.arcgismaps.mapping.view.MapView public fun Map( modifier: Modifier = Modifier, arcGISMap: ArcGISMap? = null, + onViewpointChanged: (() -> Unit)? = null, overlay: @Composable () -> Unit = {} ) { val lifecycleOwner = LocalLifecycleOwner.current @@ -69,6 +75,17 @@ public fun Map( mapView.onDestroy(lifecycleOwner) } } + + val currentViewPointChanged by rememberUpdatedState(onViewpointChanged) + LaunchedEffect(Unit) { + launch { + mapView.viewpointChanged.collect { + currentViewPointChanged?.let { + it() + } + } + } + } } @Preview