1 滚动同步

2 点击同步问题修复
3 socket 初版
This commit is contained in:
WoNiu 2024-04-03 10:37:41 +08:00
parent 120cccf235
commit 67be45e447
5 changed files with 87 additions and 28 deletions

View File

@ -0,0 +1,22 @@
import 'dart:io';
class SocketTool {
connect() {
Socket.connect('127.0.0.1', 12345).then((socket) {
print(
'Connected to: ${socket.remoteAddress.address}:${socket.remotePort}');
socket.write('GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n');
socket.listen((data) {
print(String.fromCharCodes(data).trim());
print('消息');
}, onDone: () {
print('Connection closed');
socket.destroy();
});
}).catchError((error) {
print('Error: $error');
});
}
}

View File

@ -28,22 +28,33 @@ class SynchronizationWebTool{
for (var controller in childControllers) { for (var controller in childControllers) {
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90));
} }
mainController = childControllers.first; mainController = childControllers.first;
_childControllers = childControllers.sublist(1,10); _childControllers = childControllers.sublist(1,10);
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); //
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs);
mainController.webMessage.listen((event) { mainController.webMessage.listen((event) {
print('mainController listen -- $event'); print('mainController listen -- $event');
if (event['click'] != null && webSync) {
if (!webSync) return;
if (event['click'] != null) {
Map click = event['click']; Map click = event['click'];
double x = (click['x'] as int).toDouble(); double x = (click['x'] as int).toDouble();
double y = (click['y'] as int).toDouble(); double y = (click['y'] as int).toDouble();
clickSynchronization(x, y); clickSynchronization(x, y);
} }
if (event['scroll'] != null ) {
int y = event['y'] as int;
scrollSynchronization(y);
}
}); });
} }
@ -59,6 +70,13 @@ class SynchronizationWebTool{
} }
} }
///
scrollSynchronization(int y){
for (var controller in childController) {
controller.executeScript(WindowsJs.scrollTo(y) );
}
}
/// ///
input(int value){ input(int value){
mainController.executeScript(WindowsJs.inputJs(value)); mainController.executeScript(WindowsJs.inputJs(value));

View File

@ -77,10 +77,18 @@ class _WebGridWidgetState extends State<WebGridWidget> {
var controller = controllers[index]; var controller = controllers[index];
// controller.executeScript(WindowsJs.zoom(100)); // controller.executeScript(WindowsJs.zoom(100));
showAnimationDialog( // showAnimationDialog(
context: context, // context: context,
// barrierDismissible: false, // // barrierDismissible: false,
child: ShowWebWidget(controller: controller,)); // child: ShowWebWidget(controller: controller,));
// Navigator.push(context, MaterialPageRoute(builder: (context)=> ShowWebWidget(controller: controller,) ));
Navigator.of(context).push(PageRouteBuilder(
opaque: false, //
pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,),
));
}, },
child: Container(), child: Container(),
) )
@ -100,12 +108,16 @@ class ShowWebWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Center( return Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(),
body: Center(
child: SizedBox( child: SizedBox(
width: 1400, width: 1400,
height: 900, height: 900,
child: Webview(controller), child: Webview(controller),
), ),
),
); );
} }

View File

@ -40,6 +40,25 @@ document.addEventListener("click", function (event) {
}); });
'''; ''';
///
static String scrollEventJs = '''
window.onscroll = function() {
//
var scrollTop = window.scrollY;
window.chrome.webview.postMessage({"scroll": 1 ,"y": scrollTop });
};
''';
///
static String scrollTo(int value){
return '''
window.scrollTo({
top: $value,
behavior: 'smooth' //
});
''';
}
/// ///
static String clickJs(double x, double y) { static String clickJs(double x, double y) {
return 'document.elementFromPoint($x, $y).click();'; return 'document.elementFromPoint($x, $y).click();';

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:web_synchronization_tool/windows/socket_tool.dart';
import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart'; import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart';
import 'package:web_synchronization_tool/windows/web_grid_view.dart'; import 'package:web_synchronization_tool/windows/web_grid_view.dart';
import 'package:web_synchronization_tool/windows/windowsJs.dart'; import 'package:web_synchronization_tool/windows/windowsJs.dart';
@ -41,24 +42,11 @@ class _WindowsPageState extends State<WindowsPage> {
}); });
} }
///
eventMessage() {
//
// 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();
// x = x * (0.4 / 0.7);
// y = y * (0.4 / 0.7);
// // controller.executeScript(WindowsJs.clickJs(x, y));
// }
// });
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SocketTool().connect();
if (initDone == false) return Container(); if (initDone == false) return Container();
return Scaffold( return Scaffold(