import 'package:bloc/bloc.dart'; import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:farm_tpf/presentation/screens/codes/bloc/stamp_bloc.dart'; import 'package:farm_tpf/presentation/screens/codes/models/stamp_timeline.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:open_filex/open_filex.dart'; import 'package:path_provider/path_provider.dart'; import '../../../../data/api/app_exception.dart'; import '../../../../data/api/dio_provider.dart'; import '../../../../data/repository/repository.dart'; import '../../../../utils/const_common.dart'; import '../../../../utils/utils.dart'; import '../../../custom_widgets/widget_utils.dart'; import '../models/stamp.dart'; part 'detail_stamp_state.dart'; class DetailStampCubit extends Cubit { final repository = Repository(); DetailStampCubit() : super(DetailStampInitial()); static String pathDownload = 'download'; String currentLocalPath = ''; Future preparedData(int stampId) async { try { await Future.delayed(const Duration(seconds: 0)); emit(DetailStampLoading()); var stamp = await repository.getStampDetail(id: stampId); var timeline = await repository.getStampTimeline(stampId: stampId); emit(DetailStampSuccessful(stamp, timeline)); } catch (e) { emit(DetailStampFailure(AppException.handleError(e))); } } Future updateStampStatus({ required int stampId, required String status, }) async { UtilWidget.showLoading(); await repository.updateStampStatus( (success) { UtilWidget.hideDialog(); Utils.showSnackBarSuccess(); preparedData(stampId); }, (errorMessage) { UtilWidget.hideDialog(); Utils.showSnackBarError(); }, stampId: stampId, status: status, ); } Future downloadFile(String stampCode) async { try { var dio = DioProvider(); print(DateTime.now().millisecondsSinceEpoch); var fileName = '${DateTime.now().millisecondsSinceEpoch.toString()}.xlsx'; currentLocalPath = await getFilePath(fileName); UtilWidget.showLoading(); await dio.download( '${ConstCommon.baseUrl}/api/tb-codes/export?tbCodeValue=$stampCode', currentLocalPath, onReceiveProgress: (rec, total) {}, ); UtilWidget.hideDialog(); await onOpenFile(); } catch (e) { UtilWidget.hideDialog(); Utils.showSnackBarError(message: 'Không thể mở tập tin'); print(e.toString()); } } Future onOpenFile() async { var result = await OpenFilex.open(currentLocalPath); if (result.type == ResultType.done) { //can open } else { Utils.showSnackBarError(message: 'Không thể mở tập tin'); } } Future getFilePath(uniqueFileName) async { var dir = await getApplicationDocumentsDirectory(); var path = '${dir.path}/$pathDownload/$uniqueFileName'; print(path); return path; } }