import 'dart:ffi'; import 'package:web_synchronization_tool/windows/windowsJs.dart'; import 'package:webview_windows/webview_windows.dart'; class SynchronizationWebTool{ // 私有构造函数 SynchronizationWebTool._(); // 私有静态变量,保存类的唯一实例 static SynchronizationWebTool? _instance; // 公开的静态方法,返回类的唯一实例 static SynchronizationWebTool getInstance() { _instance ??= SynchronizationWebTool._(); return _instance!; } bool webSync = false; /// 主控 late WebviewController mainController; /// 受控 List _childControllers = []; setChildController(List childControllers){ for (var controller in childControllers) { controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); } mainController = childControllers.first; _childControllers = childControllers.sublist(1,10); // 滚动监听 mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs); mainController.webMessage.listen((event) { print('mainController listen -- $event'); if (!webSync) return; if (event['click'] != null) { Map click = event['click']; double x = (click['x'] as int).toDouble(); double y = (click['y'] as int).toDouble(); clickSynchronization(x, y); } if (event['scroll'] != null ) { int y = event['y'] as int; scrollSynchronization(y); } }); } List get childController{ return _childControllers; } /// 点击同步 clickSynchronization(double x,double y){ for (var controller in childController) { controller.executeScript(WindowsJs.clickJs(x, y)); } } /// 滚动同步 scrollSynchronization(int y){ for (var controller in childController) { controller.executeScript(WindowsJs.scrollTo(y) ); } } /// 输入 input(int value){ mainController.executeScript(WindowsJs.inputJs(value)); for (var controller in childController) { controller.executeScript(WindowsJs.inputJs(value)); } } }