I use transform to emit both Result.Loading and Result.Success(listEntityToModel(it)) in Code A , and use val myResult by mViewMode.listRecord().collectAsState(initial =Result.Error(Exception()) ) to collect data.
I find the Result.Loading disappear when I use Code A.
But if I use Code B, I can Result.Loading when I use collect.
What's wrong with Code A ?
Code A
override fun listRecord(): Flow<Result<List<MRecord>>> {
return mRecordDao.listRecord().transform {
emit(Result.Loading) //It disappear when colloect
emit( Result.Success(listEntityToModel(it)) )
}
}
sealed class Result<out R> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>()
}
val myResult by mViewMode.listRecord().collectAsState(initial =Result.Error(Exception()) )
Code B
override fun listRecord(): Flow<Result<List<MRecord>>> {
return flow {
emit(Result.Loading) //I can get it when collect
val s=mRecordDao.listRecord().map { Result.Success(listEntityToModel(it)) }
emitAll(s)
}
}
//The same