Add a confirmation dialog before signing out

This commit is contained in:
Ming Ming 2023-08-06 00:50:53 +08:00
parent b6d14ba442
commit 2c6351dc9b
3 changed files with 72 additions and 11 deletions

View file

@ -1423,6 +1423,15 @@
"@setAsTooltip": {
"description": "e.g., set as wallpaper"
},
"deleteAccountConfirmDialogText": "You are about to sign out from {server}",
"@deleteAccountConfirmDialogText": {
"description": "Confirmation dialog when deleting an account (i.e., signing out)",
"placeholders": {
"server": {
"example": "http://www.example.com"
}
}
},
"errorUnauthenticated": "Unauthenticated access. Please sign-in again if the problem continues",
"@errorUnauthenticated": {

View file

@ -18,7 +18,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"de": [
@ -108,6 +109,7 @@
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip",
"deleteAccountConfirmDialogText",
"errorAlbumDowngrade"
],
@ -219,7 +221,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"es": [
@ -230,7 +233,8 @@
"searchLandingPeopleListEmptyText2",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"fi": [
@ -241,7 +245,8 @@
"searchLandingPeopleListEmptyText2",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"fr": [
@ -372,7 +377,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"it": [
@ -678,6 +684,7 @@
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip",
"deleteAccountConfirmDialogText",
"errorUnauthenticated",
"errorDisconnected",
"errorLocked",
@ -1029,6 +1036,7 @@
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip",
"deleteAccountConfirmDialogText",
"errorUnauthenticated",
"errorDisconnected",
"errorLocked",
@ -1181,7 +1189,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"pt": [
@ -1203,7 +1212,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"ru": [
@ -1330,7 +1340,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"zh": [
@ -1457,7 +1468,8 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
],
"zh_Hant": [
@ -1584,6 +1596,7 @@
"removeCollectionsFailedNotification",
"accountSettingsTooltip",
"contributorsTooltip",
"setAsTooltip"
"setAsTooltip",
"deleteAccountConfirmDialogText"
]
}

View file

@ -356,12 +356,22 @@ class _AccountView extends StatelessWidget {
@override
Widget build(BuildContext context) {
final accountLabel = AccountPref.of(account).getAccountLabel();
return _AccountTile(
account: account,
trailing: IconButton(
icon: const Icon(Icons.close),
tooltip: L10n.global().deleteTooltip,
onPressed: () {
onPressed: () async {
final result = await showDialog<bool>(
context: context,
builder: (_) => _DeleteAccountConfirmDialog(
accountLabel: accountLabel ?? account.address,
),
);
if (!context.mounted || result != true) {
return;
}
context.read<_Bloc>().add(_DeleteAccount(account));
},
),
@ -468,3 +478,32 @@ class _AboutChin extends StatelessWidget {
static final _seed = Random().nextInt(65536);
}
class _DeleteAccountConfirmDialog extends StatelessWidget {
const _DeleteAccountConfirmDialog({
required this.accountLabel,
});
@override
Widget build(BuildContext context) {
return AlertDialog(
content: Text(L10n.global().deleteAccountConfirmDialogText(accountLabel)),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop(false);
},
child: Text(MaterialLocalizations.of(context).cancelButtonLabel),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(true);
},
child: Text(MaterialLocalizations.of(context).okButtonLabel),
),
],
);
}
final String accountLabel;
}