Skip to content

feat(ui_auth): confirm account deletion #187

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/firebase_ui_auth/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ class FirebaseAuthUIExample extends StatelessWidget {
platform == TargetPlatform.iOS ||
platform == TargetPlatform.android,
showUnlinkConfirmationDialog: true,
showDeleteConfirmationDialog: true,
);
},
},
Expand Down
5 changes: 5 additions & 0 deletions packages/firebase_ui_auth/lib/src/screens/profile_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,9 @@ class ProfileScreen extends MultiProviderScreen {
/// tries to unlink a provider.
final bool showUnlinkConfirmationDialog;

/// {@macro ui.auth.widgets.delete_account_button.show_delete_confirmation_dialog}
final bool showDeleteConfirmationDialog;

const ProfileScreen({
super.key,
super.auth,
Expand All @@ -753,6 +756,7 @@ class ProfileScreen extends MultiProviderScreen {
this.actionCodeSettings,
this.showMFATile = false,
this.showUnlinkConfirmationDialog = false,
this.showDeleteConfirmationDialog = false,
});

Future<bool> _reauthenticate(BuildContext context) {
Expand Down Expand Up @@ -913,6 +917,7 @@ class ProfileScreen extends MultiProviderScreen {
const SizedBox(height: 8),
DeleteAccountButton(
auth: auth,
showDeleteConfirmationDialog: showDeleteConfirmationDialog,
onSignInRequired: () {
return _reauthenticate(context);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,19 @@ class DeleteAccountButton extends StatefulWidget {
/// {@macro ui.shared.widgets.button_variant}
final ButtonVariant variant;

/// {@template ui.auth.widgets.delete_account_button.show_delete_confirmation_dialog}
/// If `true`, the user will be asked to confirm the account deletion.
/// {@endtemplate}
final bool showDeleteConfirmationDialog;

/// {@macro ui.auth.widgets.delete_account_button}
const DeleteAccountButton({
super.key,
this.auth,
this.onSignInRequired,
this.onDeleteFailed,
this.variant = ButtonVariant.filled,
this.showDeleteConfirmationDialog = false,
});

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

void Function() pop<T>(T result) => () => Navigator.of(context).pop(result);

Future<void> _deleteAccount() async {
bool? confirmed = !widget.showDeleteConfirmationDialog;

if (!confirmed) {
final l = FirebaseUILocalizations.labelsOf(context);

confirmed = await showCupertinoDialog<bool?>(
context: context,
builder: (context) {
return UniversalAlert(
onConfirm: pop(true),
onCancel: pop(false),
title: l.confirmDeleteAccountAlertTitle,
confirmButtonText: l.confirmDeleteAccountButtonLabel,
cancelButtonText: l.cancelButtonLabel,
message: l.confirmDeleteAccountAlertMessage,
);
},
);
}

if (!(confirmed ?? false)) return;

setState(() {
_isLoading = true;
});
Expand Down
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_ar.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "ar",
"@@last_modified": "2023-10-12T15:27:44.517152",
"@@last_modified": "2023-11-16T00:26:53.958517",
"accessDisabledErrorText": "تم إيقاف إذن الوصول إلى هذا الحساب مؤقتًا.",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_de.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "de",
"@@last_modified": "2023-10-12T15:27:44.513540",
"@@last_modified": "2023-11-16T00:26:53.960802",
"accessDisabledErrorText": "Der Zugriff auf dieses Konto wurde vorübergehend gesperrt",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_en.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "en",
"@@last_modified": "2023-10-12T15:27:44.518427",
"@@last_modified": "2023-11-16T00:26:53.966433",
"accessDisabledErrorText": "Access to this account has been temporarily disabled",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_es.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "es",
"@@last_modified": "2023-10-12T15:27:44.501153",
"@@last_modified": "2023-11-16T00:26:53.955942",
"accessDisabledErrorText": "Se ha inhabilitado temporalmente al acceso a esta cuenta",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "es_419",
"@@last_modified": "2023-10-12T15:27:44.515829",
"@@last_modified": "2023-11-16T00:26:53.960081",
"accessDisabledErrorText": "Se inhabilitó temporalmente el acceso a la cuenta",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_fr.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "fr",
"@@last_modified": "2023-10-12T15:27:44.520556",
"@@last_modified": "2023-11-16T00:26:53.965799",
"accessDisabledErrorText": "L'accès à ce compte a été temporairement désactivé",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_he.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "he",
"@@last_modified": "2023-10-12T15:27:44.509494",
"@@last_modified": "2023-11-16T00:26:53.957614",
"accessDisabledErrorText": "הגישה לחשבון זה הושבתה באופן זמני",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_hi.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "hi",
"@@last_modified": "2023-10-12T15:27:44.531280",
"@@last_modified": "2023-11-16T00:26:53.970972",
"accessDisabledErrorText": "इस खाते के ऐक्सेस पर, कुछ समय के लिए रोक लगा दी गई है",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_hu.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "hu",
"@@last_modified": "2023-10-12T15:27:44.527227",
"@@last_modified": "2023-11-16T00:26:53.935987",
"accessDisabledErrorText": "A fiók átmenetileg le van tiltva",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
17 changes: 16 additions & 1 deletion packages/firebase_ui_localizations/lib/l10n/firebase_ui_id.arb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"@@locale": "id",
"@@last_modified": "2023-10-12T15:27:44.525126",
"@@last_modified": "2023-11-16T00:26:53.947166",
"accessDisabledErrorText": "Akses ke akun ini telah dinonaktifkan untuk sementara waktu",
"@accessDisabledErrorText": {
"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).",
Expand Down Expand Up @@ -513,5 +513,20 @@
"@weakPasswordErrorText": {
"description": "Error text suggesting that used password is too weak",
"placeholders": {}
},
"confirmDeleteAccountAlertTitle": "Confirm account deletion",
"@confirmDeleteAccountAlertTitle": {
"description": "Delete account confirmation dialog title",
"placeholders": {}
},
"confirmDeleteAccountAlertMessage": "Are you sure you want to delete your account?",
"@confirmDeleteAccountAlertMessage": {
"description": "Delete account confirmation dialog message",
"placeholders": {}
},
"confirmDeleteAccountButtonLabel": "Yes, delete",
"@confirmDeleteAccountButtonLabel": {
"description": "Confirm delete account button label",
"placeholders": {}
}
}
Loading