Код: Выделить всё
suspend fun signIn(user: String, pass: String): Response
class AuthViewModel @Inject constructor(
private val repo: AuthRepository
): ViewModel() {
private val _signInResponse = MutableStateFlow(null)
val signInResponse: StateFlow = _signInResponse.asStateFlow()
fun signIn(user: String, pass: String) = viewModelScope.launch {
_signInResponse.value = Response.Loading
_signInResponse.value = repo.signIn(user, pass)
}
}
< /code>
Реализация функции выглядит следующим образом: < /p>
override suspend fun signIn(user: String, pass: String) = try {
auth.signIn(user, pass).await()
Response.Success(Unit)
} catch (ex: Exception) {
Response.Failure(ex)
}
< /code>
, который работает нормально. Тем не менее, мне трудно понять, зачем использовать или не использовать поток, и излучать результат: < /p>
override suspend fun signIn(user: String, pass: String) = flow {
try {
auth.signIn(user, pass).await()
emit(Response.Success(Unit))
} catch (e: Exception) {
emit(Response.Failure(e))
}
}
< /code>
Правильно ли использовать поток? Или не требуется, поскольку операция в регистрации происходит только один раз? Кроме того, рекомендуется ли использовать mutablestateflow или sharedflow?
Подробнее здесь: https://stackoverflow.com/questions/794 ... n-firebase
Мобильная версия