You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:03:10