繁体   English   中英

jetpack compose 中未显示流量数据

[英]Flow data is not showing in jetpack compose

我正在尝试从服务器获取数据并缓存到数据库中,并将新获取的列表返回给用户。 我正在获取响应表单服务器并将其保存到本地数据库,但是当我尝试从可组合的 function 观察它时,它显示列表为空。

当我尝试在 myViewModel class 中调试和收集流数据时,它显示但未显示是可组合的 function。

@Dao
interface CategoryDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(categories: List<Category>)

    @Query("SELECT * FROM categories ORDER BY name")
    fun read(): Flow<List<Category>>

    @Query("DELETE FROM categories")
    suspend fun clearAll()
}

存储库 class:

    suspend fun getCategories(): Flow<List<Category>> {
        val categories = RetrofitModule.getCategories().categories
        dao.insert(categories)
        return dao.read()
    }

我的视图模型

    fun categoriesList(): Flow<List<Category>> {
        var list: Flow<List<Category>> = MutableStateFlow(emptyList())
        viewModelScope.launch {
            list = repository.getCategories().flowOn(Dispatchers.IO)
        }
        return list
    }

观察自:

@Composable
fun StoreScreen(navController: NavController, viewModel: CategoryViewModel) {
    val list = viewModel.categoriesList().collectAsState(emptyList())
    Log.d("appDebug", list.value.toString()) // Showing always emptyList []
}

目前的回应:

2021-05-15 16:08:56.017 5125-5125/com.demo.app D/appDebug: []

您永远不会更新已在Composable function 中收集为 state 的MutableStateFlowvalue

此外,您将Flow类型 object 分配给MutableStateFlow变量。

我们可以使用以下方法更新组合中collected的流的值:-

mutableFlow.value = newValue

我们需要将列表的类型更改为MutableStateFlow<List<Category>>而不是Flow<List<Category>>

尝试这个:-

 var list: MutableStateFlow<List<Category>> = MutableStateFlow(emptyList()) // changed the type of list to mutableStateFlow
 viewModelScope.launch {
    repository.getCategories().flowOn(Dispatchers.IO).collect { it ->
         list.value = it
    }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM