import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fluttervoice2text/model/voice_to_text_model.dart'; import 'package:fluttervoice2text/repository/voice_to_text_repository.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // 3. state provider final uploadRekamProvider = StateNotifierProvider( (ref) => UploadRekamNotifier(ref: ref)); // 2. notifier class UploadRekamNotifier extends StateNotifier { final Ref ref; UploadRekamNotifier({required this.ref}) : super(UploadRekamStateInit()); void uploadRekam({ required String host, required String userId, required String filePath, required String qrCodeStr, }) async { try { state = UploadRekamStateLoading(); final resp = await VoiceToTextRepository( dio: ref.read(dioProvider), ).prosesUpload( host: host, filePath: filePath, userId: userId, qrCodeStr:qrCodeStr, ); // print(resp); state = UploadRekamStateDone(model: resp); } catch (e) { if (e is BaseRepositoryException) { state = UploadRekamStateError(message: e.message); } else { state = UploadRekamStateError(message: e.toString()); } } } } // 1. state abstract class UploadRekamState extends Equatable { final DateTime date; const UploadRekamState(this.date); @override List get props => [date]; } class UploadRekamStateInit extends UploadRekamState { UploadRekamStateInit() : super(DateTime.now()); } class UploadRekamStateLoading extends UploadRekamState { UploadRekamStateLoading() : super(DateTime.now()); } class UploadRekamStateError extends UploadRekamState { final String message; UploadRekamStateError({ required this.message, }) : super(DateTime.now()); } class UploadRekamStateDone extends UploadRekamState { final List model; UploadRekamStateDone({ required this.model, }) : super(DateTime.now()); }