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 (将#修改为@)