< Br/> это легко сделать в держателе штата, например, ViewModel - просто сделайте Stateflow или что -то еще. Но что, если мы хотим поток списка (то есть кэшируется в ОЗУ после каждого запроса API), доступного внутри репозитория, а затем собирать из него из уровня пользовательского интерфейса? Что наиболее testable , stable и правильно способ достичь этого?
Моя первоначальная идея привела к этому: < /p>
Код: Выделить всё
class UsersRepository @Inject constructor(
private val usersApi: UsersApi,
private val handler: ResponseHandler
) {
private val _usersFlow = MutableStateFlow(Resource.Empty)
val usersFlow = _usersFlow.asStateFlow()
suspend fun fetchUserList() = withContext(Dispatchers.IO) {
_usersFlow.emit(Resource.Loading)
_usersFlow.emit(
handler {
usersApi.getUsers()
}
)
}
}
class ResponseHandler {
suspend operator fun invoke(block: suspend () -> T) = try {
Resource.Success(block())
} catch (e: Exception) {
Log.e(javaClass.name, e.toString())
val errorCode = when (e) {
is HttpException -> e.code()
is SocketTimeoutException -> ErrorCodes.SocketTimeOut.code
is UnknownHostException -> ErrorCodes.UnknownHost.code
else -> Int.MAX_VALUE
}
Resource.Error(getErrorMessage(errorCode))
}
}
< /code>
Но во время исследования я обнаружил, что в Интернете случайного парня сообщает, что это неправильно: < /p>
В настоящее время Stateflow Hot в Природа, поэтому не рекомендуется использовать в репозитории. Для холодного и реактивного потока вы можете использовать Flow, Channelflow или Callbackflow в репозитории. < /P>
< /blockquote>
он прав? Если он такой, как именно холодные потоки помогают в этой ситуации, и как мы правильно справляемся с ними?>
Подробнее здесь: https://stackoverflow.com/questions/720 ... on-android
Мобильная версия