From 0764cf4c1017c1383994745adb272d3301ca4bb6 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Wed, 31 Dec 2025 06:26:45 +0100 Subject: [PATCH] use tabStateWithFallback --- .../geckoview/domain/providers/tab_state.dart | 11 +++ .../domain/providers/tab_state.g.dart | 73 ++++++++++++++++++- .../widgets/tab_view/tab_preview.dart | 12 ++- 3 files changed, 91 insertions(+), 5 deletions(-) diff --git a/app/lib/features/geckoview/domain/providers/tab_state.dart b/app/lib/features/geckoview/domain/providers/tab_state.dart index cda04877..63dabf84 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.dart @@ -263,6 +263,17 @@ TabState? tabState(Ref ref, String? tabId) { return ref.watch(tabStatesProvider.select((tabs) => tabs[tabId])); } +@Riverpod() +Future tabStateWithFallback(Ref ref, String tabId) async { + final state = ref.watch(tabStateProvider(tabId)); + + if (state != null) { + return state; + } + + return await ref.read(tabStatesProvider.notifier).patchedState(tabId); +} + @Riverpod() Future isTabTunneled(Ref ref, String? tabId) async { final tabState = ref.watch(tabStateProvider(tabId)); diff --git a/app/lib/features/geckoview/domain/providers/tab_state.g.dart b/app/lib/features/geckoview/domain/providers/tab_state.g.dart index feae1501..220d3bc3 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.g.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.g.dart @@ -139,6 +139,77 @@ final class TabStateFamily extends $Family String toString() => r'tabStateProvider'; } +@ProviderFor(tabStateWithFallback) +const tabStateWithFallbackProvider = TabStateWithFallbackFamily._(); + +final class TabStateWithFallbackProvider + extends + $FunctionalProvider, TabState, FutureOr> + with $FutureModifier, $FutureProvider { + const TabStateWithFallbackProvider._({ + required TabStateWithFallbackFamily super.from, + required String super.argument, + }) : super( + retry: null, + name: r'tabStateWithFallbackProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$tabStateWithFallbackHash(); + + @override + String toString() { + return r'tabStateWithFallbackProvider' + '' + '($argument)'; + } + + @$internal + @override + $FutureProviderElement $createElement($ProviderPointer pointer) => + $FutureProviderElement(pointer); + + @override + FutureOr create(Ref ref) { + final argument = this.argument as String; + return tabStateWithFallback(ref, argument); + } + + @override + bool operator ==(Object other) { + return other is TabStateWithFallbackProvider && other.argument == argument; + } + + @override + int get hashCode { + return argument.hashCode; + } +} + +String _$tabStateWithFallbackHash() => + r'061011ac79738dbe4e662a76fccbc8592cba21cf'; + +final class TabStateWithFallbackFamily extends $Family + with $FunctionalFamilyOverride, String> { + const TabStateWithFallbackFamily._() + : super( + retry: null, + name: r'tabStateWithFallbackProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); + + TabStateWithFallbackProvider call(String tabId) => + TabStateWithFallbackProvider._(argument: tabId, from: this); + + @override + String toString() => r'tabStateWithFallbackProvider'; +} + @ProviderFor(isTabTunneled) const isTabTunneledProvider = IsTabTunneledFamily._(); @@ -188,7 +259,7 @@ final class IsTabTunneledProvider } } -String _$isTabTunneledHash() => r'2e1a911c26345951cf259ca4547d236a71607667'; +String _$isTabTunneledHash() => r'84035f8df248cd0586016c12c1820dd902717c1d'; final class IsTabTunneledFamily extends $Family with $FunctionalFamilyOverride, String?> { diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart index 02c154e0..b92ad8c8 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart @@ -96,8 +96,10 @@ class GridTabPreview extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final tabState = - ref.watch(tabStateProvider(tabId)) ?? TabState.$default(tabId); + final tabState = ref.watch( + tabStateWithFallbackProvider(tabId).select((asyncValue) => asyncValue.value), + ) ?? + TabState.$default(tabId); final extendedDeleteMenuController = useMenuController(); @@ -254,8 +256,10 @@ class ListTabPreview extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final colorScheme = Theme.of(context).colorScheme; - final tabState = - ref.watch(tabStateProvider(tabId)) ?? TabState.$default(tabId); + final tabState = ref.watch( + tabStateWithFallbackProvider(tabId).select((asyncValue) => asyncValue.value), + ) ?? + TabState.$default(tabId); final extendedDeleteMenuController = useMenuController();