use keyed state hook

This commit is contained in:
Fabian Freund
2026-07-02 11:10:05 +02:00
parent 867fd47a8f
commit 4c33183c97
7 changed files with 83 additions and 46 deletions
@@ -72,6 +72,7 @@ import 'package:weblibre/features/user/data/models/general_settings.dart';
import 'package:weblibre/features/user/data/models/proxy_routing_settings.dart';
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
import 'package:weblibre/features/user/domain/repositories/proxy_routing_settings.dart';
import 'package:weblibre/presentation/hooks/keyed_state.dart';
import 'package:weblibre/utils/move_to_background.dart';
import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
@@ -687,15 +688,11 @@ class BrowserScreen extends HookConsumerWidget {
// Track dismissed state without triggering full rebuild on every
// hide/show. Updated via ref.listen below and synced on tab switch.
final toolbarDismissed = useState(false);
// Sync dismissed state when selected tab changes
useEffect(() {
toolbarDismissed.value =
ref.read(toolbarVisibilityControllerProvider(selectedTabId)) ==
ToolbarVisibility.dismissed;
return null;
}, [selectedTabId]);
final toolbarDismissed = useKeyedState(
ref.read(toolbarVisibilityControllerProvider(selectedTabId)) ==
ToolbarVisibility.dismissed,
[selectedTabId],
);
final stableToolbarHeight =
autoHideTabBar && !toolbarDismissed.value && !tabInFullScreen
@@ -32,6 +32,7 @@ import 'package:weblibre/features/geckoview/features/top_sites/domain/entities/t
import 'package:weblibre/features/geckoview/features/top_sites/domain/entities/top_site_source.dart';
import 'package:weblibre/features/geckoview/features/top_sites/domain/providers.dart';
import 'package:weblibre/features/geckoview/features/top_sites/domain/repositories/top_site_repository.dart';
import 'package:weblibre/presentation/hooks/keyed_state.dart';
import 'package:weblibre/presentation/widgets/url_icon.dart';
import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
@@ -228,12 +229,7 @@ class _ReorderableTopSitesGrid extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final localItems = useState(persistedItems);
useEffect(() {
localItems.value = persistedItems;
return null;
}, [persistedItems]);
final localItems = useKeyedState(persistedItems, [persistedItems]);
return SliverToBoxAdapter(
child: Padding(