Files
fluttervoice2text/lib/screen/rekaman/upload_rekam_provider.dart

75 lines
2.1 KiB
Dart

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<UploadRekamNotifier, UploadRekamState>(
(ref) => UploadRekamNotifier(ref: ref));
// 2. notifier
class UploadRekamNotifier extends StateNotifier<UploadRekamState> {
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<Object?> 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<VoiceToTextModel> model;
UploadRekamStateDone({
required this.model,
}) : super(DateTime.now());
}