import 'dart:ffi'; import 'package:web_synchronization_tool/windows/socket_tool.dart'; 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 = []; /// 设置控制器时 注入js 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 --'); if (event['scroll'] != null ) { print(event); } if (!webSync) return; if (event['click'] != null) { Map click = event['click']; int x = click['x'] as int; int y = click['y'] as int; clickSynchronization(x, y); SocketUtils.getInstance().sendClickMessage(click); } if (event['scroll'] != null ) { print(event); int y = event['y'] as int; scrollSynchronization(y); } }); } List get childController{ return _childControllers; } /// 点击同步 clickSynchronization(int x,int 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(List values){ for (int i =0;i