diff --git a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart index ac9b0f72..52079111 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart @@ -17,7 +17,12 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +import 'dart:async'; +import 'dart:convert'; + import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; +import 'package:riverpod/experimental/persist.dart'; +import 'package:riverpod_annotation/experimental/persist.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:weblibre/core/logger.dart'; import 'package:weblibre/features/geckoview/domain/providers/selected_tab.dart'; @@ -27,6 +32,7 @@ import 'package:weblibre/features/geckoview/features/tabs/data/providers.dart'; import 'package:weblibre/features/geckoview/features/tabs/domain/providers.dart'; import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart'; import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart'; +import 'package:weblibre/features/user/data/providers.dart'; part 'selected_container.g.dart'; @@ -73,6 +79,22 @@ class SelectedContainer extends _$SelectedContainer { @override String? build() { + final persistCompleter = Completer(); + + final persistResult = persist( + ref.watch(riverpodDatabaseStorageProvider), + key: 'SelectedContainer', + encode: (state) => jsonEncode([state]), + decode: (encoded) => + (jsonDecode(encoded) as List).first as String?, + ); + + unawaited( + (persistResult.future ?? Future.value()).whenComplete( + () => persistCompleter.complete(), + ), + ); + ref.listen( fireImmediately: true, watchContainersWithCountProvider, @@ -97,6 +119,10 @@ class SelectedContainer extends _$SelectedContainer { selectedTabProvider, (previous, next) async { if (next != null) { + if (!persistCompleter.isCompleted) { + await persistCompleter.future; + } + final tabData = await ref .read(tabDataRepositoryProvider.notifier) .getTabDataById(next); @@ -121,7 +147,7 @@ class SelectedContainer extends _$SelectedContainer { }, ); - return null; + return stateOrNull; } }