Google Maps CameraPosition Jetpack Compose

Когда я использую члены 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 */
                }

Как я могу сделать это лучше?

Спасибо.

разместите свой компонент здесь, чтобы мы могли выяснить проблему

Arvin Rezaei 30.11.2022 09:31
0
1
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша карта зависает, потому что она перекомпоновывается во время движения карты — что, кстати, МНОГО, вы можете просто распечатать ее в своем составном файле, чтобы проверить это. Таким образом, вы проводите некоторую обработку при каждой рекомпозиции.

Вместо этого вы должны относиться к этому как к побочному эффекту. Самый простой способ - с 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.

Другие вопросы по теме