Fix sidebar navigation context lifecycle #1
+27
-10
@@ -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: [
|
||||||
|
|||||||
Reference in new issue
Block a user