это легко сделать в держателе состояния, например, viewmodel - просто сделайте состояние состояния или что угодно. Но что, если мы хотим поток списка (то есть кэшируется в ОЗУ после каждого запроса API), доступного внутри репозитория, а затем собирать из него из уровня пользовательского интерфейса? Что является наиболее тестируемым , stable и правильно способ достижения этого?
Моя первоначальная идея привела к этому:
Код: Выделить всё
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>
В настоящее время Hateflow Hot Hature, поэтому его не рекомендуется использовать в репозитории. Для холодного и реактивного потока вы можете использовать Flow, Channelflow или Callbackflow в репозитории. < /P>
< /blockquote>
он прав? Если он такой, как именно холодные потоки помогают в этой ситуации, и как мы правильно справляемся с ними?>
Подробнее здесь: https://stackoverflow.com/questions/720 ... on-android
Мобильная версия