From cef32273752e8418dcac573f7c10880f7e4f8c60 Mon Sep 17 00:00:00 2001 From: WoNiu Date: Sat, 30 Mar 2024 20:14:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=20windows=20=E7=AB=AF=E7=9A=84=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 2 + lib/windows/windows_main_page.dart | 152 +++++++++++++++++++++++++++++ lib/windows/windows_web_page.dart | 27 +++++ pubspec.yaml | 2 +- 4 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 lib/windows/windows_main_page.dart create mode 100644 lib/windows/windows_web_page.dart diff --git a/lib/main.dart b/lib/main.dart index ee38e49..fa4c0b4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:web_synchronization_tool/main_page.dart'; +import 'package:web_synchronization_tool/windows/windows_main_page.dart'; void main() { runApp(const MyApp()); @@ -18,6 +19,7 @@ class MyApp extends StatelessWidget { useMaterial3: true, ), home: const MainPage(), + // home: const WindowsPage(), ); } } diff --git a/lib/windows/windows_main_page.dart b/lib/windows/windows_main_page.dart new file mode 100644 index 0000000..c78479e --- /dev/null +++ b/lib/windows/windows_main_page.dart @@ -0,0 +1,152 @@ +import 'package:flutter/material.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 createState() => _WindowsPageState(); +} + +class _WindowsPageState extends State { + 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; + }); + } + + /// 注入点击监听 + addClickEventJS() { + + controller.executeScript('document.documentElement.innerHTML').then((value){ + print(value); + }); + + mainController.addScriptToExecuteOnDocumentCreated( + JavaScriptString.clickEventkJSString).then((value){ + print(value); + }); + + + + } + + @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: () { + controller.executeScript( + JavaScriptString.clickJSString(600, 280)).then((value){ + print(value); + }); + }, + child: const Text('模拟点击测试')), + TextButton( + onPressed: () { + mainController + .executeScript(JavaScriptString.inputJsString(45)); + controller + .executeScript(JavaScriptString.inputJsString(45)); + }, + child: const Text('模拟输入测试')), + TextButton( + onPressed: () { + mainController.loadUrl('http://www.df6831.com/game/'); + // controller.loadUrl('http://www.df6831.com/game/'); + }, + child: const Text('跳转')), + const SizedBox( + width: 50, + child: TextField( + keyboardType: TextInputType.number, + decoration: InputDecoration(prefixText: '网页数量'), + ), + ) + ], + ), + ), + // pageViewWidget() + Expanded(child: pageViewWidget()), + ], + ), + ); + } + + Widget pageViewWidget() { + return Row( + children: [ + Expanded( + child: WindowsWebWidget( + controller: mainController, + ), + ), + Expanded( + 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 + with AutomaticKeepAliveClientMixin { + @override + bool get wantKeepAlive => true; + + @override + Widget build(BuildContext context) { + super.build(context); + return widget.child; + } +} diff --git a/lib/windows/windows_web_page.dart b/lib/windows/windows_web_page.dart new file mode 100644 index 0000000..542073f --- /dev/null +++ b/lib/windows/windows_web_page.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:webview_windows/webview_windows.dart'; + +class WindowsWebWidget extends StatefulWidget { + WindowsWebWidget({super.key, required this.controller}); + final WebviewController controller; + @override + State createState() => _WindowsWebWidgetState(); +} + +class _WindowsWebWidgetState extends State { + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return inWindowsWebView(); + } + + Widget inWindowsWebView(){ + return Webview(widget.controller,); + } + +} diff --git a/pubspec.yaml b/pubspec.yaml index 2008e4d..c3f52cd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: cupertino_icons: ^1.0.2 flutter_inappwebview: ^6.0.0 - webview_dart: ^1.0.1 + webview_windows: ^0.4.0 dev_dependencies: flutter_test: