diff --git a/packages/firebase_ui_auth/lib/src/screens/profile_screen.dart b/packages/firebase_ui_auth/lib/src/screens/profile_screen.dart index 5d28d8a9..41f69ab3 100644 --- a/packages/firebase_ui_auth/lib/src/screens/profile_screen.dart +++ b/packages/firebase_ui_auth/lib/src/screens/profile_screen.dart @@ -754,6 +754,9 @@ class ProfileScreen extends MultiProviderScreen { /// {@macro ui.auth.widgets.delete_account_button.show_delete_confirmation_dialog} final bool showDeleteConfirmationDialog; + /// {@macro ui.auth.widgets.delete_account_button.delete_confirmation} + final Future Function(BuildContext context)? deleteConfirmation; + const ProfileScreen({ super.key, super.auth, @@ -770,6 +773,7 @@ class ProfileScreen extends MultiProviderScreen { this.showMFATile = false, this.showUnlinkConfirmationDialog = false, this.showDeleteConfirmationDialog = false, + this.deleteConfirmation, }); Future _reauthenticate(BuildContext context) { @@ -931,6 +935,7 @@ class ProfileScreen extends MultiProviderScreen { DeleteAccountButton( auth: auth, showDeleteConfirmationDialog: showDeleteConfirmationDialog, + deleteConfirmation: deleteConfirmation, onSignInRequired: () { return _reauthenticate(context); }, diff --git a/packages/firebase_ui_auth/lib/src/styling/theme.dart b/packages/firebase_ui_auth/lib/src/styling/theme.dart index f8c9b177..4fc52a48 100644 --- a/packages/firebase_ui_auth/lib/src/styling/theme.dart +++ b/packages/firebase_ui_auth/lib/src/styling/theme.dart @@ -22,7 +22,7 @@ StylesMap _buildStylesMap(Set styles) { /// Shouldn't be used if you're using pre-built screens, but could be used /// if you're building your own and using only widgets from the FirebaseUI. class FirebaseUITheme extends InheritedModel { - /// A set of styles that need to be provded down the widget tree. + /// A set of styles that need to be provided down the widget tree. final Set styles; const FirebaseUITheme({ diff --git a/packages/firebase_ui_auth/lib/src/widgets/delete_account_button.dart b/packages/firebase_ui_auth/lib/src/widgets/delete_account_button.dart index 37bac8cf..d13cebb9 100644 --- a/packages/firebase_ui_auth/lib/src/widgets/delete_account_button.dart +++ b/packages/firebase_ui_auth/lib/src/widgets/delete_account_button.dart @@ -63,6 +63,11 @@ class DeleteAccountButton extends StatefulWidget { /// {@endtemplate} final bool showDeleteConfirmationDialog; + /// {@template ui.auth.widgets.delete_account_button.delete_confirmation} + /// A callback to replace the default account deletion modal. + /// {@endtemplate} + final Future Function(BuildContext context)? deleteConfirmation; + /// {@macro ui.auth.widgets.delete_account_button} const DeleteAccountButton({ super.key, @@ -71,6 +76,7 @@ class DeleteAccountButton extends StatefulWidget { this.onDeleteFailed, this.variant = ButtonVariant.filled, this.showDeleteConfirmationDialog = false, + this.deleteConfirmation, }); @override @@ -91,19 +97,23 @@ class _DeleteAccountButtonState extends State { if (!confirmed) { final l = FirebaseUILocalizations.labelsOf(context); - confirmed = await showCupertinoDialog( - context: context, - builder: (context) { - return UniversalAlert( - onConfirm: pop(context, true), - onCancel: pop(context, false), - title: l.confirmDeleteAccountAlertTitle, - confirmButtonText: l.confirmDeleteAccountButtonLabel, - cancelButtonText: l.cancelButtonLabel, - message: l.confirmDeleteAccountAlertMessage, - ); - }, - ); + if (widget.deleteConfirmation != null) { + confirmed = await widget.deleteConfirmation!(context); + } else { + confirmed = await showCupertinoDialog( + context: context, + builder: (context) { + return UniversalAlert( + onConfirm: pop(context, true), + onCancel: pop(context, false), + title: l.confirmDeleteAccountAlertTitle, + confirmButtonText: l.confirmDeleteAccountButtonLabel, + cancelButtonText: l.cancelButtonLabel, + message: l.confirmDeleteAccountAlertMessage, + ); + }, + ); + } } if (!(confirmed ?? false)) return;