Google Maps MarkerComposable标记位置未随重组更新问题咨询
问题分析与解决方案
可能原因及对应解决方法:
LatLng对象的相等性判断问题
如果你的LatLng不是数据类,或者没有正确实现equals()和hashCode()方法,直接将position作为keys数组元素时,重组框架可能无法识别position已变更(因为仅判断引用相等而非值相等)。- 解决:将
keys改为基于经纬度的基本类型组合,确保变更能被正确检测:keys = arrayOf(position.latitude, position.longitude)
- 解决:将
rememberMarkerState的初始化逻辑问题
rememberMarkerState的position参数只是初始值,当重组发生但key未变化时,不会自动更新state的位置。即使你设置了key,若经纬度拼接的字符串存在精度问题(比如Double转字符串的格式差异),也可能导致key未正确触发state重建。- 更可靠的方式是主动监听
position变化并更新state:val markerState = rememberMarkerState(position = position) // 当position变更时,更新标记位置 LaunchedEffect(position) { markerState.position = position } MarkerComposable( keys = arrayOf(position.latitude, position.longitude), state = markerState ) { content() }
- 更可靠的方式是主动监听
库版本兼容性问题
若使用的是Google Maps Compose库,旧版本可能存在标记位置不更新的已知bug。建议升级到最新稳定版,确保修复了相关问题。
内容的提问来源于stack exchange,提问作者Mehdi Satei
相关产品推荐
相关产品推荐

