diff --git a/lib/main.dart b/lib/main.dart index 4fd834a..9b16b6a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,7 +14,7 @@ import 'package:dynamic_color/dynamic_color.dart'; import 'package:device_info_plus/device_info_plus.dart'; const String currentReleaseTag = - 'v0.5.2-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES + 'v0.5.3-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES const String bgUpdateCheckTaskName = 'bg-update-check'; @@ -107,14 +107,21 @@ void main() async { ChangeNotifierProvider(create: (context) => SettingsProvider()), Provider(create: (context) => NotificationsProvider()) ], - child: const MyApp(), + child: const Obtainium(), )); } var defaultThemeColour = Colors.deepPurple; -class MyApp extends StatelessWidget { - const MyApp({super.key}); +class Obtainium extends StatefulWidget { + const Obtainium({super.key}); + + @override + State createState() => _ObtainiumState(); +} + +class _ObtainiumState extends State { + var existingUpdateInterval = -1; @override Widget build(BuildContext context) { @@ -143,18 +150,21 @@ class MyApp extends StatelessWidget { ]); } // Register the background update task according to the user's setting - if (settingsProvider.updateInterval == 0) { - Workmanager().cancelByUniqueName(bgUpdateCheckTaskName); - } else { - Workmanager().registerPeriodicTask( - bgUpdateCheckTaskName, bgUpdateCheckTaskName, - frequency: Duration(minutes: settingsProvider.updateInterval), - initialDelay: Duration(minutes: settingsProvider.updateInterval), - constraints: Constraints(networkType: NetworkType.connected), - existingWorkPolicy: ExistingWorkPolicy.keep, - backoffPolicy: BackoffPolicy.linear, - backoffPolicyDelay: - const Duration(minutes: minUpdateIntervalMinutes)); + if (existingUpdateInterval != settingsProvider.updateInterval) { + existingUpdateInterval = settingsProvider.updateInterval; + if (existingUpdateInterval == 0) { + Workmanager().cancelByUniqueName(bgUpdateCheckTaskName); + } else { + Workmanager().registerPeriodicTask( + bgUpdateCheckTaskName, bgUpdateCheckTaskName, + frequency: Duration(minutes: existingUpdateInterval), + initialDelay: Duration(minutes: existingUpdateInterval), + constraints: Constraints(networkType: NetworkType.connected), + existingWorkPolicy: ExistingWorkPolicy.replace, + backoffPolicy: BackoffPolicy.linear, + backoffPolicyDelay: + const Duration(minutes: minUpdateIntervalMinutes)); + } } } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 6b631ff..c25cf21 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -129,5 +129,6 @@ class SettingsProvider with ChangeNotifier { void setSettingString(String settingId, String value) { prefs?.setString(settingId, value); + notifyListeners(); } } diff --git a/pubspec.yaml b/pubspec.yaml index a4be8cb..13b6655 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.5.2+23 # When changing this, update the tag in main() accordingly +version: 0.5.3+24 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.19.0-79.0.dev <3.0.0' diff --git a/test/widget_test.dart b/test/widget_test.dart index 3d647e5..9167fbf 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:obtainium/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + await tester.pumpWidget(const Obtainium()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);