web_synchronization_tool/lib/windows/windows_main_page.dart

169 lines
4.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:web_synchronization_tool/windows/windowsJs.dart';
import 'windows_web_page.dart';
import 'package:webview_windows/webview_windows.dart';
import '../JavaScriptString.dart';
class WindowsPage extends StatefulWidget {
const WindowsPage({super.key});
@override
State<WindowsPage> createState() => _WindowsPageState();
}
class _WindowsPageState extends State<WindowsPage> {
final mainController = WebviewController();
final controller = WebviewController();
bool initDone = false;
@override
void initState() {
super.initState();
controllerInit();
}
Future controllerInit() async {
await mainController.initialize();
await controller.initialize();
mainController.clearCache();
mainController.clearCookies();
controller.clearCache();
controller.clearCookies();
mainController.loadUrl('http://www.df6831.com/');
controller.loadUrl('http://www.df6831.com/');
addClickEventJS();
setState(() {
initDone = true;
});
// controller.setUserAgent('Mobile');
/// 通道消息
mainController.webMessage.listen((event) {
print('mainController listen -- $event');
controller.executeScript(WindowsJs.clickJs(event['x'], event['y']));
});
/// 通道消息
controller.webMessage.listen((event) {
// print('controller listen -- $event');
});
}
/// 注入点击监听
addClickEventJS() {
mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
}
@override
Widget build(BuildContext context) {
if (initDone == false) return Container();
return Scaffold(
body: Column(
children: [
Container(
height: 50,
color: Colors.white,
padding: const EdgeInsets.symmetric(horizontal: 50),
child: Row(
children: [
TextButton(
onPressed: () {
mainController.executeScript(WindowsJs.clickJs(200, 900));
// controller.executeScript(WindowsJs.clickJs(600, 100));
},
child: const Text('模拟点击测试')),
TextButton(
onPressed: () {
mainController.executeScript(WindowsJs.inputJsString(45));
controller.executeScript(WindowsJs.inputJsString(45));
},
child: const Text('模拟输入测试')),
TextButton(
onPressed: () {
mainController.loadUrl('http://www.df6831.com/');
},
child: const Text('跳转首页')),
TextButton(
onPressed: () {
mainController.executeScript(WindowsJs.zoom(70));
controller.executeScript(WindowsJs.zoom(40));
},
child: const Text('缩放')),
TextButton(
onPressed: () {
mainController.openDevTools();
},
child: const Text('开发者')),
TextButton(
onPressed: () {
mainController.clearCookies();
mainController.clearCache();
},
child: const Text('清除缓存')),
],
),
),
// pageViewWidget()
Expanded(child: pageViewWidget()),
],
),
);
}
Widget pageViewWidget() {
return Row(
children: [
SizedBox(
width: 1000,
height: 1000,
child: WindowsWebWidget(
controller: mainController,
),
),
SizedBox(
width: 500,
height:400,
child: WindowsWebWidget(
controller: controller,
),
)
],
);
}
}
class KeepAlivePage extends StatefulWidget {
final Widget child;
KeepAlivePage({super.key, required this.child});
@override
_KeepAlivePageState createState() => _KeepAlivePageState();
}
class _KeepAlivePageState extends State<KeepAlivePage>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
super.build(context);
return widget.child;
}
}