我正在使用Google Maps与Compose。我有个问题要解决我认为这将是相当容易的代码,但它看起来像我错过了一些东西。
我的Google Map在compose中很常见:
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = cameraPositionState,
properties = MapProperties(isMyLocationEnabled = true),
uiSettings = MapUiSettings(
myLocationButtonEnabled = false,
zoomControlsEnabled = false,
zoomGesturesEnabled = true,
mapToolbarEnabled = true
)
)
我想跳过重新构图时,缩放水平将达到让我们说水平14。我想换记号笔。我已经有记号笔了。整个名单。
问题是--每次我阅读cameraPositionState
值时--整个GoogleMap都被重新组合(也是标记)。
我能够通过使用这种方法来限制数量或重组:
LaunchedEffect(localCameraPositionState.isMoving && cameraPositionState.cameraMoveStartedReason==CameraMoveStartedReason.GESTURE) {
...
}
但这不是解决办法。问题是-每次我试图读取cameraPositionState.position.zoom
-它都会刷新。
当缩放达到14级时,我想将一些事件推到标记。
最好的方法是什么?
1条答案
按热度按时间pjngdqdw1#
如果你想改变你的视图,你可以使用derivedStateOf:
现在,如果你在视图树中需要
isMoving
,重组只会在cameraPositionState.isMoving
被改变时发生,而不是在任何cameraPositionState
变量改变时发生--只要你不在其他地方使用cameraPositionState
。如果你需要触发一些动作,并且根本不需要重新组合,你可以使用
snapshotFlow
:基本上
derivedStateOf
和snapshotFlow
的工作原理是相同的:你可以根据任意数量的状态来计算结果值,只有当结果计算与上次计算不同时,状态才会被更新或者流值才会被释放。