fix: keep updater UI handles alive after drawer close

This commit is contained in:
Naveax committed 2026-08-29 00:24:00 +03:00
1 parent 6c3df9cd16
commit c53ea8c06a
1 file changed
+27 -10
+27 -10
View File
@@ -115,32 +115,45 @@ class Updater {
return '$prefix$v${isLocal ? ' (installed)' : ''}'; return '$prefix$v${isLocal ? ' (installed)' : ''}';
} }
static Future<void> check(BuildContext context) async { static Future<void> check(BuildContext context) {
final navigator = Navigator.of(context, rootNavigator: true);
final messenger = ScaffoldMessenger.of(context);
return checkWithHandles(
navigator: navigator,
messenger: messenger,
);
}
static Future<void> checkWithHandles({
required NavigatorState navigator,
required ScaffoldMessengerState messenger,
}) async {
final info = await PackageInfo.fromPlatform(); final info = await PackageInfo.fromPlatform();
final localVersion = info.version; final localVersion = info.version;
if (localVersion.isEmpty) { if (localVersion.isEmpty) {
_showSnackBar(context, 'Could not determine app version', _showSnackBar(messenger, 'Could not determine app version',
isError: true); isError: true);
return; return;
} }
final latestVersion = await GitHubUpdater.fetchLatestVersion(); final latestVersion = await GitHubUpdater.fetchLatestVersion();
if (latestVersion == null) { if (latestVersion == null) {
_showSnackBar(context, 'Could not reach GitHub', isError: true); _showSnackBar(messenger, 'Could not reach GitHub', isError: true);
return; return;
} }
if (_compareVersions(localVersion, latestVersion) >= 0) { if (_compareVersions(localVersion, latestVersion) >= 0) {
_showSnackBar(context, 'Up to date'); _showSnackBar(messenger, 'Up to date');
return; return;
} }
final source = await installSource; final source = await installSource;
final storeName = source == InstallSource.playStore ? 'Play Store' : 'GitHub'; final storeName =
if (!context.mounted) return; source == InstallSource.playStore ? 'Play Store' : 'GitHub';
if (!navigator.mounted) return;
showDialog( showDialog(
context: context, context: navigator.context,
builder: (ctx) => AlertDialog( builder: (ctx) => AlertDialog(
backgroundColor: AppColors.bgCard, backgroundColor: AppColors.bgCard,
title: const Text('Update available', title: const Text('Update available',
@@ -171,9 +184,13 @@ class Updater {
); );
} }
static void _showSnackBar(BuildContext context, String message, static void _showSnackBar(
{bool isError = false}) { ScaffoldMessengerState messenger,
ScaffoldMessenger.of(context).showSnackBar( String message, {
bool isError = false,
}) {
if (!messenger.mounted) return;
messenger.showSnackBar(
SnackBar( SnackBar(
content: Row( content: Row(
children: [ children: [