improve readerability handling
This commit is contained in:
@@ -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 = {};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user