2026-04-20 23:52:00 +02:00
|
|
|
import 'package:equatable/equatable.dart';
|
|
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
2026-04-21 19:16:41 +02:00
|
|
|
import 'package:flux/core/blocs/session/session_cubit.dart';
|
2026-04-20 23:52:00 +02:00
|
|
|
import 'package:get_it/get_it.dart';
|
|
|
|
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
|
|
|
|
part 'auth_state.dart';
|
|
|
|
|
|
|
|
|
|
class AuthCubit extends Cubit<AuthState> {
|
|
|
|
|
final _supabase = GetIt.instance<SupabaseClient>();
|
|
|
|
|
|
|
|
|
|
AuthCubit() : super(const AuthState());
|
|
|
|
|
|
|
|
|
|
void toggleMode() {
|
|
|
|
|
emit(state.copyWith(isLoginMode: !state.isLoginMode));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> submitAuth(String email, String password) async {
|
|
|
|
|
// Partiamo puliti: via vecchi messaggi ed errori
|
|
|
|
|
emit(state.copyWith(status: AuthStatus.loading));
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (state.isLoginMode) {
|
|
|
|
|
// --- LOGICA LOGIN ---
|
|
|
|
|
await _supabase.auth.signInWithPassword(
|
|
|
|
|
email: email,
|
|
|
|
|
password: password,
|
|
|
|
|
);
|
|
|
|
|
// NESSUN EMIT DI SUCCESS!
|
|
|
|
|
// Supabase lancerà l'evento 'signedIn', il SessionCubit lo catturerà
|
|
|
|
|
// e il GoRouter ci cambierà pagina. Noi stiamo a guardare il caricamento.
|
|
|
|
|
} else {
|
|
|
|
|
// --- LOGICA SIGNUP ---
|
|
|
|
|
final AuthResponse res = await _supabase.auth.signUp(
|
|
|
|
|
email: email,
|
|
|
|
|
password: password,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (res.session == null) {
|
2026-04-21 19:16:41 +02:00
|
|
|
// Caso: Conferma Email attivata su Supabase
|
2026-04-20 23:52:00 +02:00
|
|
|
emit(
|
|
|
|
|
state.copyWith(
|
|
|
|
|
status: AuthStatus.initial,
|
|
|
|
|
infoMessage: "Controlla la tua email per confermare l'account!",
|
|
|
|
|
),
|
|
|
|
|
);
|
2026-04-21 19:16:41 +02:00
|
|
|
} else {
|
|
|
|
|
// Caso: Autologin post-registrazione (Conferma email disattivata)
|
|
|
|
|
// 1. Fermiamo il frullino!
|
|
|
|
|
emit(state.copyWith(status: AuthStatus.initial));
|
|
|
|
|
// 2. Svegliamo il SessionCubit!
|
|
|
|
|
GetIt.I<SessionCubit>().initializeSession();
|
2026-04-20 23:52:00 +02:00
|
|
|
}
|
|
|
|
|
// Se non è null, ha fatto il login automatico. Stessa cosa di sopra, ci pensa il SessionCubit.
|
|
|
|
|
}
|
|
|
|
|
} on AuthException catch (e) {
|
|
|
|
|
emit(state.copyWith(status: AuthStatus.failure, errorMessage: e.message));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
emit(
|
|
|
|
|
state.copyWith(
|
|
|
|
|
status: AuthStatus.failure,
|
|
|
|
|
errorMessage: "Errore imprevisto: $e",
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|