Когда карта завершает загрузку, я устанавливаю логическое состояние:
Код: Выделить всё
var mapLoaded by remember { mutableStateOf(false) }
Вот сокращенная версия:
Код: Выделить всё
@Composable
fun GoogleMaps(
homeDetails: HomeDetails?
) {
val style = rememberMapState()
var mapLoaded by remember { mutableStateOf(false) }
LaunchedEffect(homeDetails, mapLoaded) {
if (homeDetails != null && mapLoaded) {
style.cameraPositionState.animate(
update = CameraUpdateFactory.newLatLngZoom(
LatLng(homeDetails.lat, homeDetails.lng),
10f
),
durationMs = 500
)
}
}
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = style.cameraPositionState,
onMapLoaded = { mapLoaded = true }
) {
// markers, overlays, etc.
}
// a few other UI buttons
}
Когда срабатывает onMapLoaded, должна запускаться только анимация камеры.
Что происходит на самом деле:
Установка mapLoaded = true запускает рекомпозицию всего компонуемого объекта GoogleMaps().
Поскольку GoogleMap { … } повторно выполняет лямбда-выражение содержимого, карта визуально перерисовывается.
Мой вопрос:
- Как я могу запустить логику загрузки карты (анимацию камеры), не вызывая перекомпоновки
всего компонуемого объекта, включая содержимое GoogleMap?
Подробнее здесь: https://stackoverflow.com/questions/798 ... etpack-com
Мобильная версия