improve readerability handling

This commit is contained in:
Fabian Freund
2024-08-19 14:07:57 +02:00
parent 5ca9595b42
commit 8dc858af38
8 changed files with 176 additions and 136 deletions
@@ -0,0 +1,18 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
class ConsistentController {
final InAppWebViewController? value;
const ConsistentController(this.value);
@override
// ignore: avoid_dynamic_calls
int get hashCode => value?.platform.id.hashCode ?? -1;
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
if (other is! ConsistentController) return false;
return hashCode == other.hashCode;
}
}
@@ -1,6 +1,7 @@
import 'dart:collection';
import 'package:flutter/foundation.dart';
import 'package:lensai/features/web_view/domain/entities/consistent_controller.dart';
import 'package:lensai/features/web_view/presentation/controllers/readerability.dart';
import 'package:lensai/features/web_view/presentation/widgets/web_view.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -30,15 +31,29 @@ class WebViewRepository extends _$WebViewRepository {
return stateOrNull ?? {};
}
void _disposeReaderability(String id) {
final controller = state[id]?.currentController;
if (controller != null) {
ref
.read(
readerabilityControllerProvider(ConsistentController(controller))
.notifier,
)
.dispose();
}
}
void addTab(WebView webView) {
state = {...state, webView.tabId: webView};
}
void closeTab(String id) {
_disposeReaderability(id);
state = Map.of(state)..remove(id);
}
void closeAllTabs() {
state.keys.forEach(_disposeReaderability);
state = {};
}
}