import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:image_picker/image_picker.dart'; import 'package:medcify/network/api_provider.dart'; import '../../../components/alert.dart'; import '../../../navigation/navigation.dart'; abstract class ChangeUpiQrState{} class ChangeUpiQrInitial extends ChangeUpiQrState{} class ChangeUpiQrLoading extends ChangeUpiQrState{} class ChangeUpiQrSuccess extends ChangeUpiQrState{} class ChangeUpiQrFailure extends ChangeUpiQrState{ String error; ChangeUpiQrFailure(this.error); } class ChangeUpiQrCubit extends Cubit { ChangeUpiQrCubit() : super(ChangeUpiQrInitial()); String? image; ImagePicker picker = ImagePicker(); Future fetchUpiQr() async{ emit(ChangeUpiQrLoading()); final response = await ApiProvider.instance.fetchUpiQrImage(); if(response.status ?? false){ image = response.image ?? ""; emit(ChangeUpiQrSuccess()); }else{ emit(ChangeUpiQrFailure(response.message ?? "Something went wrong")); } } Future getImage(int pos) async{ final XFile? value = await picker.pickImage(source: (pos == 0) ? ImageSource.camera : ImageSource.gallery); if(value != null){ final bytes = (await value.readAsBytes()).lengthInBytes; final kb = bytes / 1024; final mb = kb / 1024; if(mb <= 1){ updateImage(value.path); }else{ showToast("Select image below 1mb"); } } } Future updateImage(String val) async{ Navigation.instance.navigate("/loading"); final response = await ApiProvider.instance.updateUpiQrImage(val); Navigation.instance.goBack(); if(response.status ?? false){ fetchUpiQr(); }else{ showAlert(response.message ?? "Something went wrong"); } } void showAlert(String err){ AlertX.instance.showAlert( title: "Error", msg: err, positiveButtonText: "Done", positiveButtonPressed: (){ Navigation.instance.goBack(); } ); } void showToast(String msg) { Fluttertoast.showToast( msg: msg, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.grey.shade200, textColor: Colors.black, fontSize: 14.0 ); } }