From 945f0d4051fbf1a04b1ee524cd5e9e980693e4d2 Mon Sep 17 00:00:00 2001 From: Naveax Date: Sat, 29 Aug 2026 00:23:33 +0300 Subject: [PATCH 1/3] fix: preserve navigator before closing sidebar --- lib/components/sidebar_drawer.dart | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/components/sidebar_drawer.dart b/lib/components/sidebar_drawer.dart index e305d22..1fb23b9 100644 --- a/lib/components/sidebar_drawer.dart +++ b/lib/components/sidebar_drawer.dart @@ -126,8 +126,11 @@ class _SidebarDrawerState extends State { icon: Icons.settings, label: 'Settings', onTap: () { - Navigator.of(context).pop(); - SettingsButton.open(context); + final drawerNavigator = Navigator.of(context); + final rootNavigator = + Navigator.of(context, rootNavigator: true); + drawerNavigator.pop(); + SettingsButton.openWithNavigator(rootNavigator); }, ), @@ -135,8 +138,15 @@ class _SidebarDrawerState extends State { icon: Icons.system_update_alt, label: 'Check for updates', onTap: () { - Navigator.of(context).pop(); - Updater.check(context); + final drawerNavigator = Navigator.of(context); + final rootNavigator = + Navigator.of(context, rootNavigator: true); + final messenger = ScaffoldMessenger.of(context); + drawerNavigator.pop(); + Updater.checkWithHandles( + navigator: rootNavigator, + messenger: messenger, + ); }, ), -- 2.54.0 From 6c3df9cd16ee0982543ba522e2b50ac2ab24b129 Mon Sep 17 00:00:00 2001 From: Naveax Date: Sat, 29 Aug 2026 00:23:44 +0300 Subject: [PATCH 2/3] fix: allow settings navigation with stable navigator --- lib/components/sidebar_contents/settings.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/components/sidebar_contents/settings.dart b/lib/components/sidebar_contents/settings.dart index 8ddcac9..e86573a 100644 --- a/lib/components/sidebar_contents/settings.dart +++ b/lib/components/sidebar_contents/settings.dart @@ -13,7 +13,12 @@ class SettingsButton extends StatelessWidget { // Opens the settings page sliding in from the right — matches the // sidebar end-drawer animation so it feels like one continuous motion. static void open(BuildContext context) { - Navigator.of(context).push( + openWithNavigator(Navigator.of(context, rootNavigator: true)); + } + + static void openWithNavigator(NavigatorState navigator) { + if (!navigator.mounted) return; + navigator.push( PageRouteBuilder( transitionDuration: const Duration(milliseconds: 300), reverseTransitionDuration: const Duration(milliseconds: 250), -- 2.54.0 From c53ea8c06afdb16aa07a9da87f6a57087dc37938 Mon Sep 17 00:00:00 2001 From: Naveax Date: Sat, 29 Aug 2026 00:24:00 +0300 Subject: [PATCH 3/3] fix: keep updater UI handles alive after drawer close --- lib/logic/updater.dart | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/lib/logic/updater.dart b/lib/logic/updater.dart index 7d711db..154b3c2 100644 --- a/lib/logic/updater.dart +++ b/lib/logic/updater.dart @@ -115,32 +115,45 @@ class Updater { return '$prefix$v${isLocal ? ' (installed)' : ''}'; } - static Future check(BuildContext context) async { + static Future check(BuildContext context) { + final navigator = Navigator.of(context, rootNavigator: true); + final messenger = ScaffoldMessenger.of(context); + return checkWithHandles( + navigator: navigator, + messenger: messenger, + ); + } + + static Future checkWithHandles({ + required NavigatorState navigator, + required ScaffoldMessengerState messenger, + }) async { final info = await PackageInfo.fromPlatform(); final localVersion = info.version; if (localVersion.isEmpty) { - _showSnackBar(context, 'Could not determine app version', + _showSnackBar(messenger, 'Could not determine app version', isError: true); return; } final latestVersion = await GitHubUpdater.fetchLatestVersion(); if (latestVersion == null) { - _showSnackBar(context, 'Could not reach GitHub', isError: true); + _showSnackBar(messenger, 'Could not reach GitHub', isError: true); return; } if (_compareVersions(localVersion, latestVersion) >= 0) { - _showSnackBar(context, 'Up to date'); + _showSnackBar(messenger, 'Up to date'); return; } final source = await installSource; - final storeName = source == InstallSource.playStore ? 'Play Store' : 'GitHub'; - if (!context.mounted) return; + final storeName = + source == InstallSource.playStore ? 'Play Store' : 'GitHub'; + if (!navigator.mounted) return; showDialog( - context: context, + context: navigator.context, builder: (ctx) => AlertDialog( backgroundColor: AppColors.bgCard, title: const Text('Update available', @@ -171,9 +184,13 @@ class Updater { ); } - static void _showSnackBar(BuildContext context, String message, - {bool isError = false}) { - ScaffoldMessenger.of(context).showSnackBar( + static void _showSnackBar( + ScaffoldMessengerState messenger, + String message, { + bool isError = false, + }) { + if (!messenger.mounted) return; + messenger.showSnackBar( SnackBar( content: Row( children: [ -- 2.54.0