From 172e30b2a3ae067414c28e64099b1460da9d99af Mon Sep 17 00:00:00 2001 From: WoNiu Date: Sun, 7 Apr 2024 16:05:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E7=BD=91=E9=A1=B5=E7=9A=84=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=BF=AE=E6=94=B9=E4=B8=BA=20=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=B7=BB=E5=8A=A0=20=E6=8E=A7=E5=88=B6=E7=BD=91?= =?UTF-8?q?=E9=A1=B5=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/windows/synchronization_web_tool.dart | 8 +- lib/windows/web_grid_view.dart | 176 +++++++++++++++------- lib/windows/windows_main_page.dart | 30 +++- 3 files changed, 148 insertions(+), 66 deletions(-) diff --git a/lib/windows/synchronization_web_tool.dart b/lib/windows/synchronization_web_tool.dart index 7f0b670..6fe2e65 100644 --- a/lib/windows/synchronization_web_tool.dart +++ b/lib/windows/synchronization_web_tool.dart @@ -24,10 +24,10 @@ class SynchronizationWebTool{ /// 设置控制器时 注入js setChildController(List childControllers){ - for (var controller in childControllers) { - controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); - // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); - } + // for (var controller in childControllers) { + // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); + // // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); + // } _childControllers = childControllers; diff --git a/lib/windows/web_grid_view.dart b/lib/windows/web_grid_view.dart index ee85b6d..5194865 100644 --- a/lib/windows/web_grid_view.dart +++ b/lib/windows/web_grid_view.dart @@ -4,14 +4,27 @@ import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart'; import 'package:webview_windows/webview_windows.dart'; class WebGridController { - Function(WebviewController controller)? addWebControllerBlack; + Function? addWebBlack; + Function? addAllWebBlack; - addWebController(WebviewController controller) { + addMainController(WebviewController controller) { if (addWebControllerBlack != null) { addWebControllerBlack!(controller); } } + + addWeb() { + if (addWebBlack != null) { + addWebBlack!(); + } + } + + addAllWeb() { + if (addAllWebBlack != null) { + addAllWebBlack!(); + } + } } class WebGridWidget extends StatefulWidget { @@ -24,88 +37,135 @@ class WebGridWidget extends StatefulWidget { } class _WebGridWidgetState extends State { - List controllers = []; bool initDone = false; + @override void initState() { super.initState(); - controllerInit(); + widget.controller.addWebBlack = () { + addController(); + }; + + widget.controller.addAllWebBlack = () { + addAllController(); + }; } - /// 控制器初始化 - Future controllerInit() async { + // 提娜佳一个网页 + addController() async { + if (controllers.length >= 10) return; - for (var i = 0; i< 10 ; i++) { + var controller = WebviewController(); + await controller.initialize(); + controller.loadUrl('https://www.df6831.com/'); + + controllers.add(controller); + SynchronizationWebTool.getInstance().setChildController(controllers); + setState(() {}); + } + + // 将网页加满到10个 + addAllController() async { + final num = 10 - controllers.length; + if (num < 1) return; + + for (int i = 0; i < num; i++) { var controller = WebviewController(); await controller.initialize(); controller.loadUrl('https://www.df6831.com/'); - - // controller.executeScript(WindowsJs.zoom(35)); - // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35)); - controllers.add(controller); } - SynchronizationWebTool.getInstance().setChildController(controllers); - - setState(() { - initDone = true; - }); + setState(() {}); } @override Widget build(BuildContext context) { - return GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 5, // 两列 - crossAxisSpacing: 8.0, // 水平间距 - mainAxisSpacing: 8.0, // 垂直间距 - childAspectRatio: 0.9), - itemBuilder: (BuildContext context, int index) { - return Stack( - children: [ - Webview(controllers[index]), - TextButton( - style: ButtonStyle( - overlayColor: MaterialStateProperty.resolveWith( - (states) => Colors.transparent)), - onPressed: () { + return Stack( + children: [ + GridView.builder( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 5, // 两列 + crossAxisSpacing: 8.0, // 水平间距 + mainAxisSpacing: 8.0, // 垂直间距 + childAspectRatio: 0.9), + itemBuilder: (BuildContext context, int index) { + return Stack( + children: [ + Webview(controllers[index]), + TextButton( + style: ButtonStyle( + overlayColor: MaterialStateProperty.resolveWith( + (states) => Colors.transparent)), + onPressed: () { + var controller = controllers[index]; + // controller.executeScript(WindowsJs.zoom(100)); - var controller = controllers[index]; - // controller.executeScript(WindowsJs.zoom(100)); + // showAnimationDialog( + // context: context, + // // barrierDismissible: false, + // child: ShowWebWidget(controller: controller,)); - // showAnimationDialog( - // context: context, - // // barrierDismissible: false, - // child: ShowWebWidget(controller: controller,)); + // Navigator.push(context, MaterialPageRoute(builder: (context)=> 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,main: index == 0,), - )); - - }, - child: Container(), - ) - ], - ); - }, - itemCount: controllers.length, // 生成20个瀑布流瓦片 + Navigator.of(context).push(PageRouteBuilder( + opaque: false, // 设置路由本身透明 + pageBuilder: (BuildContext context, _, __) => + ShowWebWidget( + controller: controller, + main: index == 0, + allLoadUrl: (String url) { + controllers.forEach((controller) { + controller.loadUrl(url); + }); + }, + ), + )); + }, + child: Container(), + ), + Container( + alignment: Alignment.topRight, + child: TextButton( + style: TextButton.styleFrom(padding: const EdgeInsets.all(0)), + onPressed: () { + controllers.removeAt(index); + SynchronizationWebTool.getInstance() + .setChildController(controllers); + setState(() {}); + }, + child: Container( + width: 50, + height: 50, + color: Colors.blue[100], + alignment: Alignment.center, + child: const Icon(Icons.clear)), + ), + ) + ], + ); + }, + itemCount: controllers.length, // 生成20个瀑布流瓦片 + ) + ], ); } } - class ShowWebWidget extends StatefulWidget { - const ShowWebWidget({super.key, required this.controller, this.main = false}); + const ShowWebWidget( + {super.key, + required this.controller, + this.main = false, + required this.allLoadUrl}); final WebviewController controller; + final Function(String url) allLoadUrl; + final bool main; @override @@ -113,11 +173,11 @@ class ShowWebWidget extends StatefulWidget { } class _ShowWebWidgetState extends State { + /// 网址 + TextEditingController urlController = TextEditingController(); - /// 网址 - TextEditingController urlController = TextEditingController(); - /// 服务器ip - TextEditingController ipController = TextEditingController(); + /// 服务器ip + TextEditingController ipController = TextEditingController(); @override void dispose() { @@ -144,7 +204,7 @@ class _ShowWebWidgetState extends State { ); } - Widget getTitleWidget(){ + Widget getTitleWidget() { if (widget.main == false) return input(); return Row( children: [ diff --git a/lib/windows/windows_main_page.dart b/lib/windows/windows_main_page.dart index 53fcee0..4e19ce0 100644 --- a/lib/windows/windows_main_page.dart +++ b/lib/windows/windows_main_page.dart @@ -52,7 +52,7 @@ class _WindowsPageState extends State { mainController.loadUrl('http://www.df6831.com/'); - gridController.addWebController(mainController); + gridController.addMainController(mainController); setState(() { initDone = true; @@ -61,13 +61,35 @@ class _WindowsPageState extends State { @override Widget build(BuildContext context) { - - if (initDone == false) return Container(); - return Scaffold( body: WebGridWidget( controller: gridController, ), + floatingActionButton: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + FloatingActionButton( + onPressed: (){ + gridController.addWeb(); + }, + heroTag: 1, + tooltip: '添加网页', + child: const Icon(Icons.add), + ), + const SizedBox(width: 20,) + , + FloatingActionButton( + onPressed: (){ + gridController.addAllWeb(); + }, + heroTag: 2, + tooltip: '添加10个网页', + child: const Row( + children: [Icon(Icons.add),Text('10')], + ), + ), + ], + ), ); }