Когда я использую члены CameraPositionState isMoving и cameraMoveStartedReason, Карты Google зависают и перестают отвечать. Моя цель - выполнить некоторую работу после того, как карта будет перемещена жестом.
val singapore = LatLng(1.35, 103.87)
val cameraPositionState: CameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(singapore, 11f)
}
if (cameraPositionState.isMoving &&
cameraPositionState.cameraMoveStartedReason == CameraMoveStartedReason.GESTURE) {
/* TODO */
}
Как я могу сделать это лучше?
Спасибо.
Ваша карта зависает, потому что она перекомпоновывается во время движения карты — что, кстати, МНОГО, вы можете просто распечатать ее в своем составном файле, чтобы проверить это. Таким образом, вы проводите некоторую обработку при каждой рекомпозиции.
Вместо этого вы должны относиться к этому как к побочному эффекту. Самый простой способ - с LaunchedEffect:
LaunchedEffect(cameraPositionState.isMoving) {
if (cameraPositionState.isMoving && cameraPositionState.cameraMoveStartedReason == CameraMoveStartedReason.GESTURE) {
// Do your work here, it will be done only when the map starts moving from a drag gesture.
}
}
В качестве альтернативы вы можете взглянуть на derivedStateOf (тоже побочный эффект), который может лучше решить эту проблему, чем LaunchedEffect.
разместите свой компонент здесь, чтобы мы могли выяснить проблему