From fb6dc22c059cb9079d1e29af1dd16d97972887f5 Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 <50428976+WaseemAbbasi22@users.noreply.github.com> Date: Wed, 24 Jun 2026 17:48:20 +0300 Subject: [PATCH] delete account apis implemented --- lib/controllers/api_routes/urls.dart | 2 + .../providers/api/user_provider.dart | 23 +++++++++ lib/new_views/pages/settings_page.dart | 50 ++++++++++++++----- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index e62285cd..1514d5e2 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -44,6 +44,8 @@ class URLs { static get enableFaceId => "$_baseUrl/MobileAuth/EnabledFaceId"; + static get deleteUser => "$_baseUrl/Account/DeleteUser"; // delete user account + static get checkLoginValidation => "$_baseUrl/Account/Authenticate"; // web login static get checkAppVersion => "$_baseUrl/Account/CheckAppVersion"; // web login //Reset Password Apis... diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index ec6f3242..c2d0d00f 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -217,6 +217,29 @@ class UserProvider extends ChangeNotifier { } } + Future deleteUser(BuildContext context, {required String employeeId, required String userId}) async { + Response response; + try { + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + response = await ApiManager.instance.post( + URLs.deleteUser, + body: { + "employeeId": employeeId, + "userId": userId, + }, + ); + if (response.statusCode >= 200 && response.statusCode < 300) { + Navigator.pop(context); + return true; + } + Navigator.pop(context); + return false; + } catch (error) { + Navigator.pop(context); + return false; + } + } + /// sign up with User object; /// return -2 if request in progress /// return -1 if error happen when sending request diff --git a/lib/new_views/pages/settings_page.dart b/lib/new_views/pages/settings_page.dart index b043d41a..a497300e 100644 --- a/lib/new_views/pages/settings_page.dart +++ b/lib/new_views/pages/settings_page.dart @@ -7,6 +7,7 @@ import 'package:local_auth_darwin/local_auth_darwin.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; @@ -15,6 +16,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/views/widgets/dialogs/dialog.dart'; import 'package:test_sa/views/widgets/item_views/info_header_widget.dart'; @@ -177,6 +179,7 @@ class _SettingsPageState extends State { ], ).toShadowContainer(context, borderRadius: 16, padding: 16).paddingAll(16), // 12.height, + //TODO need to test this ... AppFilledButton( label: "Delete Account", buttonColor: AppColor.red30, @@ -190,19 +193,40 @@ class _SettingsPageState extends State { ); if (result) { - Utils.showLoading(context); - await Future.delayed(const Duration(seconds: 2)); - Utils.hideLoading(context); - - // final userProvider = Provider.of(context, listen: false); - // bool isSuccess = await userProvider.logout(context); - // if (isSuccess) { - // Provider.of(context, listen: false).resetSettings(); - // userProvider.reset(); - // Navigator.of(context).pop(); - // Navigator.of(context).pop(); - // Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); - // } + final userProvider = Provider.of(context, listen: false); + + // Check if user data is available + if (userProvider.user == null) { + Utils.showToast("User information not available"); + return; + } + + final employeeId = userProvider.user!.employeeId ?? ""; + final userId = userProvider.user!.userID ?? ""; + + if (employeeId.isEmpty || userId.isEmpty) { + Utils.showToast("Unable to delete account: missing user information"); + return; + } + + // Call the delete user API + bool isSuccess = await userProvider.deleteUser( + context, + employeeId: employeeId, + userId: userId, + ); + + if (isSuccess) { + // Reset settings and user data + Provider.of(context, listen: false).resetSettings(); + userProvider.reset(); + + // Navigate to login page + Navigator.of(context).pushNamedAndRemoveUntil( + LoginPage.routeName, + (routes) => false, + ); + } } }, ).paddingAll(16),