diff --git a/lib/collections/spotube_icons.dart b/lib/collections/spotube_icons.dart index 55e09f91..cd6fa5e0 100644 --- a/lib/collections/spotube_icons.dart +++ b/lib/collections/spotube_icons.dart @@ -78,4 +78,5 @@ abstract class SpotubeIcons { static const lightning = Icons.flash_on_rounded; static const colorSync = FeatherIcons.activity; static const language = FeatherIcons.globe; + static const error = FeatherIcons.alertTriangle; } diff --git a/lib/components/root/sidebar.dart b/lib/components/root/sidebar.dart index c6aa7bb2..618dc7ba 100644 --- a/lib/components/root/sidebar.dart +++ b/lib/components/root/sidebar.dart @@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:flutter/material.dart'; +import 'package:motion_toast/motion_toast.dart'; import 'package:sidebarx/sidebarx.dart'; import 'package:spotube/collections/assets.gen.dart'; @@ -280,7 +281,9 @@ class SidebarFooter extends HookConsumerWidget { ), IconButton( icon: const Icon(SpotubeIcons.settings), - onPressed: () => Sidebar.goToSettings(context), + onPressed: () { + Sidebar.goToSettings(context); + }, ), ], ), diff --git a/lib/l10n/app_bn.arb b/lib/l10n/app_bn.arb index 9af0c4a0..6bddf7a4 100644 --- a/lib/l10n/app_bn.arb +++ b/lib/l10n/app_bn.arb @@ -181,5 +181,6 @@ "success_emoji": "আমরা সফল🥳", "success_message": "এখন আপনি সফলভাবে আপনার Spotify অ্যাকাউন্ট দিয়ে লগ ইন করেছেন। সাধুভাত আপনাকে", "step_4": "ধাপ 4", - "step_4_steps": "কপি করা \"sp_dc\" এবং \"sp_key\" এর মান সংশ্লিষ্ট ফিল্ডে পেস্ট করুন" + "step_4_steps": "কপি করা \"sp_dc\" এবং \"sp_key\" এর মান সংশ্লিষ্ট ফিল্ডে পেস্ট করুন", + "something_went_wrong": "কিছু ভুল হয়েছে" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index ed5552ce..62741c18 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -181,5 +181,6 @@ "success_emoji": "Success🥳", "success_message": "Now you're successfully Logged In with your Spotify account. Good Job, mate!", "step_4": "Step 4", - "step_4_steps": "Paste the copied \"sp_dc\" and \"sp_key\" values in the respective fields" + "step_4_steps": "Paste the copied \"sp_dc\" and \"sp_key\" values in the respective fields", + "something_went_wrong": "Something went wrong" } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 50da49ec..0e219c13 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -181,5 +181,6 @@ "success_emoji": "Succès🥳", "success_message": "Vous êtes maintenant connecté avec succès à votre compte Spotify. Bon travail, mon ami!", "step_4": "Étape 4", - "step_4_steps": "Collez les valeurs copiées de \"sp_dc\" et \"sp_key\" dans les champs respectifs" + "step_4_steps": "Collez les valeurs copiées de \"sp_dc\" et \"sp_key\" dans les champs respectifs", + "something_went_wrong": "Quelque chose s'est mal passé" } \ No newline at end of file diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index 283badbc..02b91400 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -181,5 +181,6 @@ "success_emoji": "सफलता🥳", "success_message": "अब आप अपने स्पॉटिफाई अकाउंट से सफलतापूर्वक लॉगइन हो गए हैं। अच्छा काम किया!", "step_4": "स्टेप 4", - "step_4_steps": "कॉपी की गई \"sp_dc\" और \"sp_key\" मानों को संबंधित फील्ड में पेस्ट करें" + "step_4_steps": "कॉपी की गई \"sp_dc\" और \"sp_key\" मानों को संबंधित फील्ड में पेस्ट करें", + "something_went_wrong": "कुछ गलत हो गया" } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index f48de05f..712f81be 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,6 +29,7 @@ import 'package:spotube/provider/user_preferences_provider.dart'; import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/youtube.dart'; import 'package:spotube/themes/theme.dart'; +import 'package:spotube/utils/custom_toast_handler.dart'; import 'package:spotube/utils/persisted_state_notifier.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:system_theme/system_theme.dart'; @@ -119,7 +120,7 @@ Future main(List rawArgs) async { enableApplicationParameters: false, ), FileHandler(await getLogsPath(), printLogs: false), - SnackbarHandler(const Duration(seconds: 3)), + CustomToastHandler(), ], ), releaseConfig: CatcherOptions( @@ -134,7 +135,7 @@ Future main(List rawArgs) async { await getLogsPath(), printLogs: false, ), - SnackbarHandler(const Duration(seconds: 3)), + CustomToastHandler(), ], ), runAppFunction: () { diff --git a/lib/utils/custom_toast_handler.dart b/lib/utils/custom_toast_handler.dart new file mode 100644 index 00000000..b8d3bf3e --- /dev/null +++ b/lib/utils/custom_toast_handler.dart @@ -0,0 +1,58 @@ +import 'package:catcher/model/platform_type.dart'; +import 'package:catcher/model/report.dart'; +import 'package:catcher/model/report_handler.dart'; +import 'package:flutter/material.dart'; +import 'package:motion_toast/motion_toast.dart'; +import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/extensions/context.dart'; + +class CustomToastHandler extends ReportHandler { + CustomToastHandler(); + + @override + Future handle(Report error, BuildContext? context) async { + final theme = Theme.of(context!); + + MotionToast( + primaryColor: theme.colorScheme.errorContainer, + icon: SpotubeIcons.error, + title: Text( + context.l10n.something_went_wrong, + style: theme.textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + color: theme.colorScheme.onError, + ), + ), + description: Text( + error.error.toString(), + style: theme.textTheme.bodyMedium?.copyWith( + color: theme.colorScheme.onError, + ), + ), + dismissable: true, + toastDuration: const Duration(seconds: 10), + borderRadius: 10, + ).show(context); + return true; + } + + @override + List getSupportedPlatforms() => [ + PlatformType.android, + PlatformType.iOS, + PlatformType.web, + PlatformType.linux, + PlatformType.macOS, + PlatformType.windows, + ]; + + @override + bool isContextRequired() { + return true; + } + + @override + bool shouldHandleWhenRejected() { + return false; + } +} diff --git a/pubspec.lock b/pubspec.lock index b29affab..a913095d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1126,6 +1126,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + motion_toast: + dependency: "direct main" + description: + name: motion_toast + sha256: f33fad8264d6d5359e41f2027d2d833614401c3983102e8f0aa13ccbbdcdeecd + url: "https://pub.dev" + source: hosted + version: "2.6.8" mutex: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 7c87589f..07db73fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -102,6 +102,7 @@ dependencies: device_preview: ^1.1.0 media_kit_native_event_loop: ^1.0.4 dbus: ^0.7.8 + motion_toast: ^2.6.8 dev_dependencies: build_runner: ^2.3.2