import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../repository/scan_repository.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // 3. state provider final uploadScanProvider = StateNotifierProvider( (ref) => UploadScanNotifier(ref: ref)); // 2. notifier class UploadScanNotifier extends StateNotifier { final Ref ref; UploadScanNotifier({required this.ref}) : super(UploadScanStateInit()); void uploadScan({ required String host, required String userId, required String base64File, }) async { try { state = UploadScanStateLoading(); final resp = await ScanRepository( dio: ref.read(dioProvider), ).prosesScan( host: host, base64File: base64File, userId: userId, ); // print(resp); state = UploadScanStateDone(pesan: resp); } catch (e) { if (e is BaseRepositoryException) { state = UploadScanStateError(message: e.message); } else { state = UploadScanStateError(message: e.toString()); } } } } // 1. state abstract class UploadScanState extends Equatable { final DateTime date; const UploadScanState(this.date); @override List get props => [date]; } class UploadScanStateInit extends UploadScanState { UploadScanStateInit() : super(DateTime.now()); } class UploadScanStateLoading extends UploadScanState { UploadScanStateLoading() : super(DateTime.now()); } class UploadScanStateError extends UploadScanState { final String message; UploadScanStateError({ required this.message, }) : super(DateTime.now()); } class UploadScanStateDone extends UploadScanState { final String pesan; UploadScanStateDone({ required this.pesan, }) : super(DateTime.now()); }