import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../model/logout_response_model.dart'; import '../../provider/dio_provider.dart'; import '../../provider/graphql_provider.dart'; import '../../repository/auth_repository.dart'; import '../../repository/base_repository.dart'; // 3. state provider final logoutProvider = StateNotifierProvider( (ref) => LogoutNotifier(ref: ref)); // 2. notifier class LogoutNotifier extends StateNotifier { final Ref ref; LogoutNotifier({required this.ref}) : super(LogoutStateInit()); void logout({ required String email, required String idGoogleSignIn, }) async { try { state = LogoutStateLoading(); final graphql = ref.read(graphqlProvider('')); final dio = ref.read(dioProvider); final resp = await AuthRepository(graphql: graphql, dio: dio).logout( email, idGoogleSignIn, ); // print(resp); state = LogoutStateDone(model: resp); } catch (e) { if (e is BaseRepositoryException) { state = LogoutStateError(message: e.message ?? ""); } else { state = LogoutStateError(message: e.toString()); } } } } // 1. state abstract class LogoutState extends Equatable { final DateTime date; const LogoutState(this.date); @override List get props => [date]; } class LogoutStateInit extends LogoutState { LogoutStateInit() : super(DateTime.now()); } class LogoutStateLoading extends LogoutState { LogoutStateLoading() : super(DateTime.now()); } class LogoutStateError extends LogoutState { final String message; LogoutStateError({ required this.message, }) : super(DateTime.now()); } class LogoutStateDone extends LogoutState { final LogoutResponseModel model; LogoutStateDone({ required this.model, }) : super(DateTime.now()); }