import 'package:bang_navigator/features/web_view/domain/providers.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'readerability_script.g.dart'; @Riverpod() class ReaderabilityScriptService extends _$ReaderabilityScriptService { late Future _readerabilityScript; @override Future build(InAppWebViewController? controller) async { _readerabilityScript = ref.watch(readerabilityScriptProvider.future); } Future _injectScript() async { if (controller != null) { await _readerabilityScript .then((script) => controller!.evaluateJavascript(source: script)); } } Future ensureScriptInjected() async { if (controller != null) { final injected = await controller!.evaluateJavascript( source: "(typeof window !== 'undefined' && typeof window.isReaderable === 'function')", ) as bool; if (!injected) { await _injectScript(); } } } Future isReaderable() async { await ensureScriptInjected(); if (controller != null) { return await controller!.evaluateJavascript( source: 'isReaderable();', ) as bool; } return false; } Future applyReaderable() async { await ensureScriptInjected(); if (controller != null) { await controller!.evaluateJavascript(source: 'applyReaderable();'); } } }