From bd4c628c899c37139b8c167073c5e197a8922f56 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sun, 28 Dec 2025 19:33:33 +0100 Subject: [PATCH] automatic ui reset --- app/lib/main.dart | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/lib/main.dart b/app/lib/main.dart index a30b3ee5..e0c1384c 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -23,6 +23,7 @@ import 'package:background_fetch/background_fetch.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart' show GeckoBrowserService, GeckoLoggingService, LogLevel; import 'package:home_widget/home_widget.dart'; @@ -48,6 +49,26 @@ class _MainWidget extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final rootKey = ref.watch(appStateKeyProvider); + final pauseTime = useRef(null); + useOnAppLifecycleStateChange((previous, current) { + switch (current) { + case AppLifecycleState.resumed: + if (pauseTime.value != null && + DateTime.now().difference(pauseTime.value!) > + const Duration(minutes: 30)) { + //Rebuild widget tree after long time of inactivity + ref.read(appStateKeyProvider.notifier).reset(); + logger.i('UI reset'); + } + pauseTime.value = null; + case AppLifecycleState.detached: + case AppLifecycleState.inactive: + case AppLifecycleState.hidden: + case AppLifecycleState.paused: + pauseTime.value ??= DateTime.now(); + } + }); + final themeMode = ref.watch( generalSettingsWithDefaultsProvider.select((value) => value.themeMode), );