Compare commits
	
		
			2 Commits
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 99ab6695a9 | |
|  | 172e30b2a3 | 
|  | @ -24,10 +24,10 @@ class SynchronizationWebTool{ | |||
|   /// 设置控制器时 注入js | ||||
|   setChildController(List<WebviewController> 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; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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<WebGridWidget> { | ||||
| 
 | ||||
|   List<WebviewController> 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<ShowWebWidget> { | ||||
|   /// 网址 | ||||
|   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<ShowWebWidget> { | |||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Widget getTitleWidget(){ | ||||
|   Widget getTitleWidget() { | ||||
|     if (widget.main == false) return input(); | ||||
|     return Row( | ||||
|       children: [ | ||||
|  | @ -160,34 +220,61 @@ class _ShowWebWidgetState extends State<ShowWebWidget> { | |||
|   } | ||||
| 
 | ||||
|   /// 跳转网址 | ||||
|   input(){ | ||||
|   input() { | ||||
|     return Row( | ||||
|       children: [ | ||||
|         SizedBox(width: 400, child: TextField(style: const TextStyle(fontSize: 14),controller: urlController,)), | ||||
|         TextButton(onPressed: (){ | ||||
|           String url = urlController.text; | ||||
|           // if (!url.startsWith("https://") ) { | ||||
|           //   url = "https://$url"; | ||||
|           // } | ||||
|           widget.controller.loadUrl(url); | ||||
|         }, child: const Text('跳转',style: TextStyle(fontSize: 14),)) | ||||
|         SizedBox( | ||||
|             width: 400, | ||||
|             child: TextField( | ||||
|               style: const TextStyle(fontSize: 14), | ||||
|               controller: urlController, | ||||
|             )), | ||||
|         TextButton( | ||||
|             onPressed: () { | ||||
|               String url = urlController.text; | ||||
|               // if (!url.startsWith("https://") ) { | ||||
|               //   url = "https://$url"; | ||||
|               // } | ||||
|               widget.controller.loadUrl(url); | ||||
|             }, | ||||
|             child: const Text( | ||||
|               '跳转', | ||||
|               style: TextStyle(fontSize: 14), | ||||
|             )), | ||||
|         TextButton( | ||||
|             onPressed: () { | ||||
|               String url = urlController.text; | ||||
| 
 | ||||
|               widget.allLoadUrl(url); | ||||
|             }, | ||||
|             child: const Text( | ||||
|               '全部跳转', | ||||
|               style: TextStyle(fontSize: 14), | ||||
|             )), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   ipSet(){ | ||||
|   ipSet() { | ||||
|     ipController.text = SocketUtils.getInstance().url; | ||||
|     return Row( | ||||
|       children: [ | ||||
|         SizedBox(width: 100, child: TextField(style: const TextStyle(fontSize: 14),controller: ipController,)), | ||||
|         TextButton(onPressed: (){ | ||||
|           SocketUtils.getInstance().url = ipController.text; | ||||
|           SocketUtils.getInstance().connect(); | ||||
|         }, child: const Text('保存服务器ip',style: TextStyle(fontSize: 14),)) | ||||
|         SizedBox( | ||||
|             width: 100, | ||||
|             child: TextField( | ||||
|               style: const TextStyle(fontSize: 14), | ||||
|               controller: ipController, | ||||
|             )), | ||||
|         TextButton( | ||||
|             onPressed: () { | ||||
|               SocketUtils.getInstance().url = ipController.text; | ||||
|               SocketUtils.getInstance().connect(); | ||||
|             }, | ||||
|             child: const Text( | ||||
|               '保存服务器ip', | ||||
|               style: TextStyle(fontSize: 14), | ||||
|             )) | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ class _WindowsPageState extends State<WindowsPage> { | |||
| 
 | ||||
|     mainController.loadUrl('http://www.df6831.com/'); | ||||
| 
 | ||||
|     gridController.addWebController(mainController); | ||||
|     gridController.addMainController(mainController); | ||||
| 
 | ||||
|     setState(() { | ||||
|       initDone = true; | ||||
|  | @ -61,13 +61,35 @@ class _WindowsPageState extends State<WindowsPage> { | |||
| 
 | ||||
|   @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')], | ||||
|             ), | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue