Skip to content

Commit 053a96e

Browse files
authored
feat(ui_auth): confirm account deletion (#187)
`ProfileScreen` and `DeleteAccountButton` now have `showDeleteConfirmationDialog`. If set to true, user will be presented a dialog asking to confirm this action.
1 parent b796017 commit 053a96e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+644
-24
lines changed

Diff for: packages/firebase_ui_auth/example/lib/main.dart

+1
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ class FirebaseAuthUIExample extends StatelessWidget {
269269
platform == TargetPlatform.iOS ||
270270
platform == TargetPlatform.android,
271271
showUnlinkConfirmationDialog: true,
272+
showDeleteConfirmationDialog: true,
272273
);
273274
},
274275
},

Diff for: packages/firebase_ui_auth/lib/src/screens/profile_screen.dart

+5
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,9 @@ class ProfileScreen extends MultiProviderScreen {
738738
/// tries to unlink a provider.
739739
final bool showUnlinkConfirmationDialog;
740740

741+
/// {@macro ui.auth.widgets.delete_account_button.show_delete_confirmation_dialog}
742+
final bool showDeleteConfirmationDialog;
743+
741744
const ProfileScreen({
742745
super.key,
743746
super.auth,
@@ -753,6 +756,7 @@ class ProfileScreen extends MultiProviderScreen {
753756
this.actionCodeSettings,
754757
this.showMFATile = false,
755758
this.showUnlinkConfirmationDialog = false,
759+
this.showDeleteConfirmationDialog = false,
756760
});
757761

758762
Future<bool> _reauthenticate(BuildContext context) {
@@ -913,6 +917,7 @@ class ProfileScreen extends MultiProviderScreen {
913917
const SizedBox(height: 8),
914918
DeleteAccountButton(
915919
auth: auth,
920+
showDeleteConfirmationDialog: showDeleteConfirmationDialog,
916921
onSignInRequired: () {
917922
return _reauthenticate(context);
918923
},

Diff for: packages/firebase_ui_auth/lib/src/widgets/delete_account_button.dart

+30
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,19 @@ class DeleteAccountButton extends StatefulWidget {
5858
/// {@macro ui.shared.widgets.button_variant}
5959
final ButtonVariant variant;
6060

61+
/// {@template ui.auth.widgets.delete_account_button.show_delete_confirmation_dialog}
62+
/// If `true`, the user will be asked to confirm the account deletion.
63+
/// {@endtemplate}
64+
final bool showDeleteConfirmationDialog;
65+
6166
/// {@macro ui.auth.widgets.delete_account_button}
6267
const DeleteAccountButton({
6368
super.key,
6469
this.auth,
6570
this.onSignInRequired,
6671
this.onDeleteFailed,
6772
this.variant = ButtonVariant.filled,
73+
this.showDeleteConfirmationDialog = false,
6874
});
6975

7076
@override
@@ -76,7 +82,31 @@ class _DeleteAccountButtonState extends State<DeleteAccountButton> {
7682
fba.FirebaseAuth get auth => widget.auth ?? fba.FirebaseAuth.instance;
7783
bool _isLoading = false;
7884

85+
void Function() pop<T>(T result) => () => Navigator.of(context).pop(result);
86+
7987
Future<void> _deleteAccount() async {
88+
bool? confirmed = !widget.showDeleteConfirmationDialog;
89+
90+
if (!confirmed) {
91+
final l = FirebaseUILocalizations.labelsOf(context);
92+
93+
confirmed = await showCupertinoDialog<bool?>(
94+
context: context,
95+
builder: (context) {
96+
return UniversalAlert(
97+
onConfirm: pop(true),
98+
onCancel: pop(false),
99+
title: l.confirmDeleteAccountAlertTitle,
100+
confirmButtonText: l.confirmDeleteAccountButtonLabel,
101+
cancelButtonText: l.cancelButtonLabel,
102+
message: l.confirmDeleteAccountAlertMessage,
103+
);
104+
},
105+
);
106+
}
107+
108+
if (!(confirmed ?? false)) return;
109+
80110
setState(() {
81111
_isLoading = true;
82112
});

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_ar.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "ar",
3-
"@@last_modified": "2023-10-12T15:27:44.517152",
3+
"@@last_modified": "2023-11-16T00:26:53.958517",
44
"accessDisabledErrorText": "تم إيقاف إذن الوصول إلى هذا الحساب مؤقتًا.",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_de.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "de",
3-
"@@last_modified": "2023-10-12T15:27:44.513540",
3+
"@@last_modified": "2023-11-16T00:26:53.960802",
44
"accessDisabledErrorText": "Der Zugriff auf dieses Konto wurde vorübergehend gesperrt",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_en.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "en",
3-
"@@last_modified": "2023-10-12T15:27:44.518427",
3+
"@@last_modified": "2023-11-16T00:26:53.966433",
44
"accessDisabledErrorText": "Access to this account has been temporarily disabled",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_es.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "es",
3-
"@@last_modified": "2023-10-12T15:27:44.501153",
3+
"@@last_modified": "2023-11-16T00:26:53.955942",
44
"accessDisabledErrorText": "Se ha inhabilitado temporalmente al acceso a esta cuenta",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_es_419.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "es_419",
3-
"@@last_modified": "2023-10-12T15:27:44.515829",
3+
"@@last_modified": "2023-11-16T00:26:53.960081",
44
"accessDisabledErrorText": "Se inhabilitó temporalmente el acceso a la cuenta",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_fr.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "fr",
3-
"@@last_modified": "2023-10-12T15:27:44.520556",
3+
"@@last_modified": "2023-11-16T00:26:53.965799",
44
"accessDisabledErrorText": "L'accès à ce compte a été temporairement désactivé",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_he.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "he",
3-
"@@last_modified": "2023-10-12T15:27:44.509494",
3+
"@@last_modified": "2023-11-16T00:26:53.957614",
44
"accessDisabledErrorText": "הגישה לחשבון זה הושבתה באופן זמני",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_hi.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "hi",
3-
"@@last_modified": "2023-10-12T15:27:44.531280",
3+
"@@last_modified": "2023-11-16T00:26:53.970972",
44
"accessDisabledErrorText": "इस खाते के ऐक्सेस पर, कुछ समय के लिए रोक लगा दी गई है",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_hu.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "hu",
3-
"@@last_modified": "2023-10-12T15:27:44.527227",
3+
"@@last_modified": "2023-11-16T00:26:53.935987",
44
"accessDisabledErrorText": "A fiók átmenetileg le van tiltva",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

Diff for: packages/firebase_ui_localizations/lib/l10n/firebase_ui_id.arb

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"@@locale": "id",
3-
"@@last_modified": "2023-10-12T15:27:44.525126",
3+
"@@last_modified": "2023-11-16T00:26:53.947166",
44
"accessDisabledErrorText": "Akses ke akun ini telah dinonaktifkan untuk sementara waktu",
55
"@accessDisabledErrorText": {
66
"description": "Used as an error message when account is blocked and user tries to perform some actions with the account (e.g. unlinking a credential).",
@@ -513,5 +513,20 @@
513513
"@weakPasswordErrorText": {
514514
"description": "Error text suggesting that used password is too weak",
515515
"placeholders": {}
516+
},
517+
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
518+
"@confirmDeleteAccountAlertTitle": {
519+
"description": "Delete account confirmation dialog title",
520+
"placeholders": {}
521+
},
522+
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
523+
"@confirmDeleteAccountAlertMessage": {
524+
"description": "Delete account confirmation dialog message",
525+
"placeholders": {}
526+
},
527+
"confirmDeleteAccountButtonLabel": "Yes, delete",
528+
"@confirmDeleteAccountButtonLabel": {
529+
"description": "Confirm delete account button label",
530+
"placeholders": {}
516531
}
517532
}

0 commit comments

Comments
 (0)