71 lines
1.9 KiB
Dart
71 lines
1.9 KiB
Dart
|
|
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<WebviewController> _childControllers = [];
|
|
|
|
setChildController(List<WebviewController> 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.clickEventJs);
|
|
mainController.webMessage.listen((event) {
|
|
print('mainController listen -- $event');
|
|
if (event['click'] != null && webSync) {
|
|
Map click = event['click'];
|
|
double x = (click['x'] as int).toDouble();
|
|
double y = (click['y'] as int).toDouble();
|
|
|
|
clickSynchronization(x, y);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
List<WebviewController> get childController{
|
|
return _childControllers;
|
|
}
|
|
|
|
/// 点击同步
|
|
clickSynchronization(double x,double y){
|
|
for (var controller in childController) {
|
|
controller.executeScript(WindowsJs.clickJs(x, y));
|
|
}
|
|
}
|
|
|
|
/// 输入
|
|
input(int value){
|
|
mainController.executeScript(WindowsJs.inputJs(value));
|
|
for (var controller in childController) {
|
|
controller.executeScript(WindowsJs.inputJs(value));
|
|
}
|
|
}
|
|
|
|
}
|