import 'dart:html'; import 'package:flutter/services.dart'; import 'web_platform_manager.dart'; import '../in_app_webview/in_app_webview_settings.dart'; import 'in_app_web_view_web_element.dart'; import 'headless_in_app_web_view_web_element.dart'; import '../types.dart'; class HeadlessInAppWebViewManager { static late MethodChannel _sharedChannel; late BinaryMessenger _messenger; HeadlessInAppWebViewManager({required BinaryMessenger messenger}) { this._messenger = messenger; HeadlessInAppWebViewManager._sharedChannel = MethodChannel( 'com.pichillilorenzo/flutter_headless_inappwebview', const StandardMethodCodec(), _messenger, ); HeadlessInAppWebViewManager._sharedChannel.setMethodCallHandler(handleMethod); } Future handleMethod(MethodCall call) async { switch (call.method) { case "run": String id = call.arguments["id"]; Map params = call.arguments["params"].cast(); run(id, params); break; default: throw UnimplementedError("Unimplemented ${call.method} method"); } return null; } void run(String id, Map params) { var webView = InAppWebViewWebElement(viewId: id, messenger: _messenger); var headlessWebView = HeadlessInAppWebViewWebElement( id: id, messenger: _messenger, webView: webView ); WebPlatformManager.webViews.putIfAbsent(id, () => webView); webView.iframe.style.display = 'none'; Map initialSettings = params["initialSettings"].cast(); if (initialSettings.isEmpty) { webView.initialSettings = InAppWebViewSettings(); } else { webView.initialSettings = InAppWebViewSettings.fromMap(initialSettings); } webView.initialUrlRequest = URLRequest.fromMap(params["initialUrlRequest"]?.cast()); webView.initialFile = params["initialFile"]; webView.initialData = InAppWebViewInitialData.fromMap(params["initialData"]?.cast()); document.body?.append(webView.iframe); webView.prepare(); headlessWebView.onWebViewCreated(); webView.makeInitialLoad(); } }