如何解决Android MVI 使用 StateFlow 和分页 3
我正在尝试使用状态流和分页 3 来实现 android MVI 架构,但是当我有一个包含分页数据的视图状态时,我感到困惑。
问题是我将视图模型中的视图状态公开为状态流对象,但现在在该视图状态中,我有另一个来自分页库的流对象。
在状态流中可以有流吗?如果不是我应该怎么做?
这是我的代码以供更多说明。
任务库
override fun list(
pageNumber: Int,pageSize: Int,groupId: Long?,query: String
): Flow<PagingData<Task>> {
return Pager(
config = PagingConfig(
pageSize = Consts.PageSize,maxSize = 200,enablePlaceholders = false
),remoteMediator = TaskRemoteMediator(query,groupId,db,taskApi),pagingSourceFactory = {
TaskDataSource(taskApi,query)
}
).flow
}
Taskviewmodel
viewmodelScope.launch {
try {
_taskListViewState.emit(TaskListViewState.Loading)
val tasks = taskRepo.list(1,Consts.PageSize,intent.groupId,"")
_taskListViewState.emit(TaskListViewState.Data(tasks))
} catch (e: Exception) {
_taskListViewState.emit(TaskListViewState.Error(R.string.unkNown_error))
}
}
TaskListViewState
sealed class TaskListViewState {
object Idle : TaskListViewState()
object Loading : TaskListViewState()
data class Data(val tasks: Flow<PagingData<Task>>) : TaskListViewState()
data class Error(val error: Int) : TaskListViewState()
}
TaskListFragment
private fun observeViewState() {
lifecycleScope.launchWhenStarted {
viewmodel.taskListViewState.collect {
render(it)
}
}
}
private fun render(viewState: TaskListViewState) {
Log.d(TAG,"render: $viewState")
when (viewState) {
is TaskListViewState.Loading -> showLoading()
is TaskListViewState.Idle -> hildeLoading()
is TaskListViewState.Error -> {
hildeLoading()
showMessage(viewState.error)
}
is TaskListViewState.Data -> {
hildeLoading()
lifecycleScope.launchWhenCreated {
viewState.tasks.collectLatest {
tasksAdapter.submitData(lifecycle,it)
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。