我无法接收数据存储中的更改。在主屏幕上的设置中更改数据库模式后,应用程序应观察另一个数据源。
@Singleton
class SettingsRepositoryImpl @Inject constructor(
@ApplicationContext private val context: Context
) : SettingsRepository {
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "user_prefs")
override val databaseMode: Flow<String>
get() =
context.dataStore.data.map { preferences ->
preferences[DATABASE_MODE_KEY] ?: DatabaseMode.LOCAL.name
}.distinctUntilChanged()
/// Viewmodel ->
viewModelScope.launch(Dispatchers.Default) {
observeDatabaseModeUseCase().collect { databaseMode ->
observeAllProductsUseCase(databaseMode).map { products ->
getFilteredProductListUseCase(
products,
filterProductDataState.value.filterProduct
)
}.collect {
_uiState.value = MyPantryProductsUiState.Loaded(
MyPantryModel(
groupsProduct = getGroupProductListUseCase(it),
loadingVisible = false
)
)
}
}
}
我试过所有的调度员。我不知道为什么它没有发出新值
1条答案
按热度按时间rlcwz9us1#
您正在另一个流的收集块中收集一个无限流。因此,当外部流中的第一个项被发射时,它将永远开始收集内部流,而外部流中的第二个项永远不会被发射。使用
flatMapLatest
代替。这将使它在第一个流发出新项时中断第二个流。您没有显示
_uiState
是什么,但您可以使用上面的stateIn
将其变为StateFlow以简化代码。