From 6fa8a56643c2c8191cc07a84afbe2d303b25ea28 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Thu, 30 Oct 2025 06:59:42 +0100 Subject: [PATCH] reset ui only on demand --- .../domain/controllers/bottom_sheet.dart | 30 +++++++++++++++++++ .../domain/controllers/bottom_sheet.g.dart | 2 +- app/lib/main.dart | 21 ------------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/lib/features/geckoview/domain/controllers/bottom_sheet.dart b/app/lib/features/geckoview/domain/controllers/bottom_sheet.dart index d1180c39..b3646f8d 100644 --- a/app/lib/features/geckoview/domain/controllers/bottom_sheet.dart +++ b/app/lib/features/geckoview/domain/controllers/bottom_sheet.dart @@ -18,21 +18,51 @@ * along with this program. If not, see . */ +import 'package:flutter/widgets.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:weblibre/core/providers/app_state.dart'; import 'package:weblibre/features/geckoview/features/browser/domain/entities/sheet.dart'; +import 'package:weblibre/features/geckoview/features/browser/domain/providers/lifecycle.dart'; part 'bottom_sheet.g.dart'; @Riverpod(keepAlive: true) class BottomSheetController extends _$BottomSheetController { + DateTime? _pauseTime; + bool _resetDue = false; + @override Sheet? build() { + ref.listen(browserViewLifecycleProvider, (previous, current) { + switch (current) { + case AppLifecycleState.resumed: + if (_pauseTime != null && + DateTime.now().difference(_pauseTime!) > + const Duration(minutes: 5)) { + _resetDue = true; + } + _pauseTime = null; + case AppLifecycleState.detached: + case AppLifecycleState.inactive: + case AppLifecycleState.hidden: + case AppLifecycleState.paused: + _pauseTime ??= DateTime.now(); + default: + } + }); + return null; } ///We depend on a listener that updates/syncs UI to open the sheet // ignore: use_setters_to_change_properties api decision void show(Sheet sheet) { + if (_resetDue) { + ref.read(appStateKeyProvider.notifier).reset(); + _resetDue = false; + return; + } + state = sheet; } diff --git a/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart b/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart index 71a62b5e..1bbb8abf 100644 --- a/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart +++ b/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart @@ -42,7 +42,7 @@ final class BottomSheetControllerProvider } String _$bottomSheetControllerHash() => - r'54112ccef72ad7777c746b9f2dc02da1e383c127'; + r'47234d4bd06187c6f0b85013ffc50ebdd065c90b'; abstract class _$BottomSheetController extends $Notifier { Sheet? build(); diff --git a/app/lib/main.dart b/app/lib/main.dart index b8132288..8b852cc9 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -23,7 +23,6 @@ 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,26 +47,6 @@ 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: 5)) { - //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), );