Flow -Rückkehr nach Raum mit staatein funktioniert nicht, sondern sharein arbeitet
Posted: 02 Feb 2025, 19:47
Ich habe das in meinem Dao
Dies in meinem Repository
Dies in meinem ViewModel
Dies in meinem Fragment inviewCreated
Wenn ich also meine Erinnerungen aktualisiere, kann ich in meinen Protokollen die Ausgabet im Raum emittieren sehen. Außerdem aktualisiert meine Benutzeroberfläche nicht.
dann funktioniert es wie erwartet.
Code: Select all
@Query("SELECT * FROM reminders")
fun getAll(): Flow
Code: Select all
override fun getAllRemindersAsFlow(): Flow {
return mRemindersDao.getAll().map {
Log.e("TAG", "room emitting")
it.map(ReminderEntity::toDomain)
}
}
Code: Select all
val reminders = mRemindersRepository.getAllRemindersAsFlow().stateIn(
scope = viewModelScope,
started = SharingStarted.Eagerly,
initialValue = emptyList()
)
Code: Select all
lifecycleScope.launch {
mViewModel.reminders.collectLatest { reminders ->
Log.e("TAG", "onViewCreated: Updated", )
when (mBinding.remindersBottomNavigationView.selectedItemId) {
R.id.upcoming_reminders -> if (reminders.isEmpty()) {
mBinding.reminderHelpLabel.setText(R.string.no_upcoming_reminder)
} else mRemindersRecyclerViewAdapter.setReminders(reminders.filter(Reminder::isUpcoming))
R.id.all_reminders -> if (reminders.isEmpty()) {
mBinding.reminderHelpLabel.setText(R.string.click_to_create_a_reminder)
} else mRemindersRecyclerViewAdapter.setReminders(reminders)
}
}
}
Code: Select all
val reminders = mRemindersRepository.getAllRemindersAsFlow().shareIn(
scope = viewModelScope,
started = SharingStarted.Eagerly,
replay = 1
)