web_synchronization_tool/lib/windows/synchronization_web_tool.dart

89 lines
2.2 KiB
Dart
Raw Normal View History

2024-04-02 11:02:06 +08:00
import 'dart:ffi';
import 'package:web_synchronization_tool/windows/windowsJs.dart';
import 'package:webview_windows/webview_windows.dart';
class SynchronizationWebTool{
2024-04-02 20:29:52 +08:00
// 私有构造函数
SynchronizationWebTool._();
// 私有静态变量,保存类的唯一实例
static SynchronizationWebTool? _instance;
// 公开的静态方法,返回类的唯一实例
static SynchronizationWebTool getInstance() {
_instance ??= SynchronizationWebTool._();
return _instance!;
}
bool webSync = false;
2024-04-02 11:02:06 +08:00
/// 主控
late WebviewController mainController;
/// 受控
2024-04-02 20:29:52 +08:00
List<WebviewController> _childControllers = [];
setChildController(List<WebviewController> childControllers){
for (var controller in childControllers) {
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90));
2024-04-02 20:29:52 +08:00
}
mainController = childControllers.first;
_childControllers = childControllers.sublist(1,10);
// 滚动监听
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs);
2024-04-02 20:29:52 +08:00
mainController.webMessage.listen((event) {
print('mainController listen -- $event');
if (!webSync) return;
if (event['click'] != null) {
2024-04-02 20:29:52 +08:00
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);
}
2024-04-02 20:29:52 +08:00
});
}
List<WebviewController> get childController{
return _childControllers;
}
2024-04-02 11:02:06 +08:00
/// 点击同步
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) );
}
}
2024-04-02 11:02:06 +08:00
/// 输入
input(int value){
mainController.executeScript(WindowsJs.inputJs(value));
for (var controller in childController) {
controller.executeScript(WindowsJs.inputJs(value));
}
}
}