【发布时间】:2021-11-21 05:12:38
【问题描述】:
我有一些视图模型:
private val locationFlow = locationProviderClient.locationFlow(LocationModule.locationRequest)
val position = MutableStateFlow(Location(LocationManager.NETWORK_PROVIDER))
val positions = MutableStateFlow(emptyList<Position>())
init {
collectLocation()
}
private fun collectLocation() {
viewModelScope.launch {
locationFlow.collect {
position.value = it
positions.value = positionService.updateLocation(it.toPosition())
}
}
}
当前位置的初始化流程正在启动。在每个新值上,最后一个位置应该被发送到position 状态流中,并且应该执行网络请求。
这是负责收集状态流的片段代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launchWhenStarted {
...
viewModel.positions.collect(updateMarkers)
viewModel.position.collect(updateCamera)
...
}
}
现在,当片段开始位置发出时,两个流都会更新,请求是发送 updateMarkers 被调用但 updateCamera 不是。
我想有一些微妙的错误,如果没有谁能告诉我我到底做错了什么?
【问题讨论】:
-
updateCamera 功能在哪里?
-
collect是一个挂起函数,你应该在不同的协程中调用它(启动) -
@charlie.7
private val GoogleMap.updateCamera: suspend (Location) -> Unit get() = { animateCamera(CameraUpdateFactory.newLatLngZoom(it.toLatLng(), ZOOM_STREETS)) }它工作正常,但是 - 但没有被调用 -
从主线程调用
-
@IR42 你是对的 - 它有帮助。你会添加答案吗?
标签: android kotlin android-viewmodel flow