Rumahjo-Android-APP/lib/data/cubits/system/delete_account_cubit.dart

68 lines
2.1 KiB
Dart
Raw Normal View History

2024-09-07 00:58:50 +00:00
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../utils/api.dart';
import '../../../utils/hive_utils.dart';
import '../../helper/custom_exception.dart';
abstract class DeleteAccountState {}
class DeleteAccountInitial extends DeleteAccountState {}
class DeleteAccountProgress extends DeleteAccountState {}
class DeleteAccountFailure extends DeleteAccountState {
final String errorMessage;
DeleteAccountFailure(this.errorMessage);
}
class AccountDeleted extends DeleteAccountState {
final String successMessage;
AccountDeleted({required this.successMessage});
}
class DeleteAccountCubit extends Cubit<DeleteAccountState> {
DeleteAccountCubit() : super(DeleteAccountInitial());
void deleteUserAccount(BuildContext context) {
emit(DeleteAccountProgress());
deleteAccount(context)
.then((value) => emit(AccountDeleted(successMessage: value)))
.catchError((e) => emit(DeleteAccountFailure(e.toString())));
}
Future<String> deleteAccount(BuildContext context) async {
String message = '';
try {
/* User? currentUser = await FirebaseAuth.instance.currentUser;
if (currentUser != null) {
await currentUser.reload();
}*/
await FirebaseAuth.instance.currentUser!.delete().then((value) async {
Map<String, String> parameter = {Api.userid: HiveUtils.getUserId()!};
var response =
await Api.post(url: Api.apiDeleteUser, parameter: parameter);
User? user = FirebaseAuth.instance.currentUser;
await user?.delete();
if (response["error"]) {
throw CustomException(response["message"]);
} else {
Future.delayed(
Duration.zero,
() {
HiveUtils.logoutUser(context, onLogout: () {}, isRedirect: false);
},
);
message = response['message'];
}
});
} on FirebaseAuthException catch (e) {
if (e.code == 'requires-recent-login') {
// throw CustomException(Strings.userDeleteErrorMessage);
}
}
return message;
}
}