Skip to content

Commit

Permalink
feat: Add logout confirmation dialog and error options menu
Browse files Browse the repository at this point in the history
  • Loading branch information
Losses committed Dec 20, 2024
1 parent 079112a commit 5ef9349
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 9 deletions.
16 changes: 16 additions & 0 deletions lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1006,5 +1006,21 @@
"fix": "Fix",
"@fix": {
"description": "The action button of the service login failed settings item."
},
"confirmLogoutTitle": "Confirm Logout",
"@confirmLogoutTitle": {
"description": "Title for the logout confirmation dialog."
},
"confirmLogoutSubtitle": "Are you sure you want to log out? All locally stored login credentials will be deleted.",
"@confirmLogoutSubtitle": {
"description": "Subtitle for the logout confirmation dialog."
},
"retryLogin": "Retry Login",
"@retryLogin": {
"description": "Option to retry login in the error options menu."
},
"logout": "Logout",
"@logout": {
"description": "Option to log out in the error options menu."
}
}
6 changes: 3 additions & 3 deletions lib/utils/dialogs/information/information.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import 'package:fluent_ui/fluent_ui.dart';
import '../../l10n.dart';
import '../../router/navigation.dart';

Future<void> showInformationDialog({
Future<bool?> showInformationDialog({
required BuildContext context,
required String title,
required String subtitle,
bool barrierDismissible = true,
bool dismissWithEsc = true,
}) async {
await $showModal<bool>(
return await $showModal<bool>(
context,
(context, $close) => ContentDialog(
title: Text(title),
Expand All @@ -28,4 +28,4 @@ Future<void> showInformationDialog({
barrierDismissible: barrierDismissible,
dismissWithEsc: dismissWithEsc,
);
}
}
66 changes: 60 additions & 6 deletions lib/widgets/settings/settings_box_scrobble_login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:provider/provider.dart';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:collection/collection.dart';

import '../../utils/dialogs/information/information.dart';
import '../../utils/l10n.dart';
import '../../utils/dialogs/scrobble/show_scrobble_login_dialog.dart';
import '../../providers/scrobble.dart';
Expand Down Expand Up @@ -39,15 +40,68 @@ class SettingsBoxScrobbleLogin extends SettingsBoxBase {

return Button(
onPressed: isLoggedIn
? null
: () => showScrobbleLoginDialog(
context,
serviceName,
title,
),
? () => _showLogoutConfirmation(context)
: () {
if (hasError) {
_showErrorOptionsMenu(context);
} else {
showScrobbleLoginDialog(context, serviceName, title);
}
},
child: Text(
isLoggedIn ? s.edit : (hasError ? s.fix : s.login),
),
);
}

void _showLogoutConfirmation(BuildContext context) {
final s = S.of(context);
showInformationDialog(
context: context,
title: s.confirmLogoutTitle,
subtitle: s.confirmLogoutSubtitle,
).then((confirmed) {
if (confirmed == true) {
if (!context.mounted) return;

Provider.of<ScrobbleProvider>(context, listen: false)
.logout(serviceName);
}
});
}

void _showErrorOptionsMenu(BuildContext context) {
final s = S.of(context);
final menuController = FlyoutController();

menuController.showFlyout(
builder: (context) {
return MenuFlyout(
items: [
MenuFlyoutItem(
text: Text(s.retryLogin),
onPressed: () {
Navigator.pop(context);
showScrobbleLoginDialog(context, serviceName, title);
},
),
MenuFlyoutItem(
text: Text(s.logout),
onPressed: () {
Navigator.pop(context);
_showLogoutConfirmation(context);
},
),
MenuFlyoutItem(
text: Text(s.edit),
onPressed: () {
Navigator.pop(context);
showScrobbleLoginDialog(context, serviceName, title);
},
),
],
);
},
);
}
}

0 comments on commit 5ef9349

Please sign in to comment.