如何在Jetpack Compose中动态修改Google Maps的MapType?
解决Jetpack Compose中Google Maps动态切换地图类型的问题
你的代码核心问题是:remember没有将传入的mapType参数作为依赖项,导致参数更新时MapProperties不会重新生成,地图类型无法同步变化。以下是两种可行的修改方案:
方案一:通过remember依赖参数更新状态
将mapType加入remember的依赖列表,每次参数变化时重新创建MapProperties:
@Composable fun MapMeasurementCompactScreen( mapType: MapType ) { val cameraPositionState = rememberCameraPositionState { position = CameraPosition.fromLatLngZoom(LatLng(1.35, 103.87), 10f) } // 把mapType作为remember的依赖,参数变化时重新生成MapProperties val properties by remember(mapType) { mutableStateOf( MapProperties( isMyLocationEnabled = true, mapType = mapType // 直接使用传入的参数 ) ) } Box { GoogleMap( modifier = Modifier.fillMaxSize(), cameraPositionState = cameraPositionState, properties = properties, onMyLocationClick = { cameraPositionState.position = CameraPosition.fromLatLngZoom(LatLng(it.latitude, it.longitude), 10f) } ) } }
方案二:使用derivedStateOf派生状态
适合基于外部参数动态生成状态的场景,自动监听mapType的变化:
@Composable fun MapMeasurementCompactScreen( mapType: MapType ) { val cameraPositionState = rememberCameraPositionState { position = CameraPosition.fromLatLngZoom(LatLng(1.35, 103.87), 10f) } val properties by remember { derivedStateOf { MapProperties( isMyLocationEnabled = true, mapType = mapType ) } } Box { GoogleMap( modifier = Modifier.fillMaxSize(), cameraPositionState = cameraPositionState, properties = properties, onMyLocationClick = { cameraPositionState.position = CameraPosition.fromLatLngZoom(LatLng(it.latitude, it.longitude), 10f) } ) } }
两种方案都能实现:当外部传入的mapType参数更新时,MapProperties会同步更新,触发GoogleMap组件重组并切换地图类型。
内容的提问来源于stack exchange,提问作者user13926345
相关产品推荐
相关产品推荐

