import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../repository/no-login-scan/no_login_scan_repository.dart'; import '../../model/sukses_person_model.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // 3. state provider final noLoginUploadScanProvider = StateNotifierProvider( (ref) => NoLoginUploadScanNotifier(ref: ref)); // 2. notifier class NoLoginUploadScanNotifier extends StateNotifier { final Ref ref; NoLoginUploadScanNotifier({required this.ref}) : super(NoLoginUploadScanStateInit()); void uploadScan({ required String host, required String userId, required String base64File, }) async { try { state = NoLoginUploadScanStateLoading(); final resp = await NoLoginScanRepository( dio: ref.read(dioProvider), ).prosesScan( host: host, base64File: base64File, userId: userId, ); // print(resp); state = NoLoginUploadScanStateDone(model: resp); } catch (e) { if (e is BaseRepositoryException) { state = NoLoginUploadScanStateError(message: e.message); } else { state = NoLoginUploadScanStateError(message: e.toString()); } } } } // 1. state abstract class NoLoginUploadScanState extends Equatable { final DateTime date; const NoLoginUploadScanState(this.date); @override List get props => [date]; } class NoLoginUploadScanStateInit extends NoLoginUploadScanState { NoLoginUploadScanStateInit() : super(DateTime.now()); } class NoLoginUploadScanStateLoading extends NoLoginUploadScanState { NoLoginUploadScanStateLoading() : super(DateTime.now()); } class NoLoginUploadScanStateError extends NoLoginUploadScanState { final String message; NoLoginUploadScanStateError({ required this.message, }) : super(DateTime.now()); } class NoLoginUploadScanStateDone extends NoLoginUploadScanState { final List model; NoLoginUploadScanStateDone({ required this.model, }) : super(DateTime.now()); }