This commit is contained in:
@@ -32,15 +32,18 @@ import 'package:weblibre/extensions/uri.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/entities/states/tab.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/entities/tab_container_selection.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/desktop_mode.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/pending_tab_selection.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/restore_complete.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/selected_tab.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_detail_state.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_list.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_session.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart';
|
||||
import 'package:weblibre/features/geckoview/features/browser/domain/controllers/home_target_controller.dart';
|
||||
import 'package:weblibre/features/geckoview/features/browser/domain/providers.dart';
|
||||
import 'package:weblibre/features/geckoview/features/browser/domain/services/browser_data.dart';
|
||||
import 'package:weblibre/features/geckoview/features/find_in_page/domain/repositories/find_in_page.dart';
|
||||
import 'package:weblibre/features/geckoview/features/tabs/data/database/database.dart';
|
||||
import 'package:weblibre/features/geckoview/features/tabs/data/entities/isolation_context.dart';
|
||||
import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_mode.dart';
|
||||
@@ -1211,6 +1214,21 @@ class TabRepository extends _$TabRepository {
|
||||
ref.listen(
|
||||
tabListProvider,
|
||||
(previous, next) async {
|
||||
final activeTabIds = next.value.toSet();
|
||||
final removedTabIds = previous?.value
|
||||
.where((tabId) => !activeTabIds.contains(tabId))
|
||||
.toSet();
|
||||
if (removedTabIds != null) {
|
||||
for (final tabId in removedTabIds) {
|
||||
// These families are keepAlive so tab-specific state survives while
|
||||
// a tab is merely in the background. Once Gecko confirms removal,
|
||||
// keeping their services and listeners serves no purpose.
|
||||
ref.invalidate(tabSessionProvider(tabId: tabId));
|
||||
ref.invalidate(desktopModeProvider(tabId));
|
||||
ref.invalidate(findInPageRepositoryProvider(tabId));
|
||||
}
|
||||
}
|
||||
|
||||
if (_suppressNextReclose) {
|
||||
_suppressNextReclose = false;
|
||||
// Drop tombstones for the tabs that just came back via undo so
|
||||
|
||||
Reference in New Issue
Block a user