ARTICLE AD BOX
Im building audio app, which gets music from device's folder. I use ContentObserver to know when the data has changed
@RequiresApi(Build.VERSION_CODES.Q) class AudioObserver @Inject constructor( private val directoryChangeUseCase: DirectoryChangeUseCase ) : ContentObserver(Handler(Looper.getMainLooper())) { @RequiresApi(Build.VERSION_CODES.R) override fun onChange(selfChange: Boolean, uris: Collection<Uri?>, flags: Int) { super.onChange(selfChange, uris, flags) directoryChangeUseCase.directoryUpdated() } }i use callback, to make viewmodel's function trigger too
class MusicViewModel @Inject constructor( private val fileRepository: FileRepository, private val audioManager: AudioManager ) : ViewModel(), DirectoryChangeUseCase{ private val _fetchedAudioList = MutableStateFlow<List<MusicUI>>(emptyList()) val fetchedAudioList = _fetchedAudioList.asStateFlow() override fun directoryUpdated() { fetchAudioFromDevice(true) } fun fetchAudioFromDevice(isUpdated: Boolean){ _fetchedAudioList.update{ fileRepository.fetchAudioFiles(isUpdated).map {it.toMusicUi()} } Log.d("called", "${_fetchedAudioList.value.size}") } }but ui doesnt update, when _fetchedAudioList is updated
val musicUIList = musicViewModel.fetchedAudioList.collectAsStateWithLifecycle()unless i trigger function by clicking on something
modifier = Modifier.clickable(onClick = {musicViewModel.fetchAudioFromDevice(true)})how can i make ui update, when my list in viewmodel is updated
