import 'package:absensi_sas/repository/googleapis_repository.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../provider/dio_provider.dart'; import '../../provider/graphql_provider.dart'; import '../../repository/base_repository.dart'; abstract class GoogleApisProviderState extends Equatable { final DateTime date; const GoogleApisProviderState(this.date); @override List get props => [date]; } class GoogleApisProviderStateInit extends GoogleApisProviderState { GoogleApisProviderStateInit() : super(DateTime.now()); } class GoogleApisProviderStateLoading extends GoogleApisProviderState { GoogleApisProviderStateLoading() : super(DateTime.now()); } class GoogleApisProviderStateError extends GoogleApisProviderState { final String message; GoogleApisProviderStateError({ required this.message, }) : super(DateTime.now()); } class GoogleApisProviderStateDone extends GoogleApisProviderState { final String model; GoogleApisProviderStateDone({ required this.model, }) : super(DateTime.now()); } //notifier class GoogleApisProviderNotifier extends StateNotifier { final Ref ref; GoogleApisProviderNotifier({ required this.ref, }) : super(GoogleApisProviderStateInit()); void googleApisProvider( String latitude, String longitude, ) async { try { state = GoogleApisProviderStateLoading(); final graphql = ref.read(graphqlProvider('')); final dio = ref.read(dioProvider); final resp = await GoogleApisRepository(graphql: graphql, dio: dio) .getAddressFromCoordinates( latitude, longitude ); state = GoogleApisProviderStateDone(model: resp); } catch (e) { if (e is BaseRepositoryException) { print(e.message); state = GoogleApisProviderStateError(message: e.message ?? ""); } else { state = GoogleApisProviderStateError(message: e.toString()); } } } } // provider final googleApisProviderProvider = StateNotifierProvider( (ref) => GoogleApisProviderNotifier(ref: ref), );