Как интегрировать функцию Supabase supabase.composeAuth.rememberSignInWithGoogle() в ViewModel?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как интегрировать функцию Supabase supabase.composeAuth.rememberSignInWithGoogle() в ViewModel?

Сообщение Anonymous »

Я пробую Supabase в среде Android. На данный момент я реализовал аутентификацию supabase с помощью Compose Auth и входа в Google, и все работает нормально. Поскольку я хочу использовать принципы чистой архитектуры, функциональность всего метода входа должна быть помещена не в составную обработку пользовательского интерфейса экрана входа, а скорее в репозиторий, который внедряет соответствующая модель представления. В настоящее время функция входа в систему все еще находится в одном из моих компонуемых объектов, поскольку следующей функции из Compose Auth требуется контекст @Composable:
val action = supabase.composeAuth.rememberSignInWithGoogle()

Поскольку функциям необходим контекст @Composable, я не уверен, как правильно реализовать эту функциональность в модели представления или в репозитории. Может ли кто-нибудь помочь мне найти способ обработки функций, которым нужен контекст @Composable в отношении чистой архитектуры?
Это фрагмент моей компоновки с использованием упомянутой функции:@Composable
fun SignInScreen(viewModel: SignInViewModel = koinViewModel()) {
val context = LocalContext.current
val client = SupabaseClient

val action = client.supabaseClient.composeAuth.rememberSignInWithGoogle(
onResult = { result -> //optional error handling
when (result) {
is NativeSignInResult.Success -> {
Toast.makeText(context, "You are signed in!", Toast.LENGTH_SHORT).show()
}
is NativeSignInResult.ClosedByUser -> {}
is NativeSignInResult.Error -> {
Toast.makeText(context, result.message, Toast.LENGTH_SHORT).show()
}
is NativeSignInResult.NetworkError -> {
Toast.makeText(context, result.message, Toast.LENGTH_SHORT).show()
}
}
},
fallback = { // optional: add custom error handling, not required by default

}
)

Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
OutlinedButton(
onClick = { action.startFlow()},
content = { ProviderButtonContent(provider = Google)}
)
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... withgoogle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»