Files
absensi_sas_flutter/lib/screen/home/googleapis_provider.dart

76 lines
2.2 KiB
Dart

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<Object?> 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<GoogleApisProviderState> {
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<GoogleApisProviderNotifier, GoogleApisProviderState>(
(ref) => GoogleApisProviderNotifier(ref: ref),
);