117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 | |
| import 'package:web_synchronization_tool/web_widget.dart';
 | |
| 
 | |
| import 'JavaScriptString.dart';
 | |
| 
 | |
| class MainPage extends StatefulWidget {
 | |
|   const MainPage({super.key});
 | |
| 
 | |
|   @override
 | |
|   State<MainPage> createState() => _MainPageState();
 | |
| }
 | |
| 
 | |
| class _MainPageState extends State<MainPage> {
 | |
| 
 | |
|   late InAppWebViewController mainController;
 | |
|   late InAppWebViewController controller;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
| 
 | |
| 
 | |
|   }
 | |
| 
 | |
|   /// 注入点击监听
 | |
|   addClickEventJS(){
 | |
| 
 | |
|     final clickJsUS = UserScript(groupName: 'click',source: JavaScriptString.clickEventkJSString, injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START);
 | |
| 
 | |
|     mainController.addUserScript(userScript: clickJsUS);
 | |
| 
 | |
|     mainController.addJavaScriptHandler(handlerName: 'Click', callback: (args){
 | |
|       controller.evaluateJavascript(source: JavaScriptString.clickJSString(args.first, args.last) );
 | |
|     });
 | |
| 
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|       body: Column(
 | |
|         children: [
 | |
|           Container(
 | |
|             height: 50,
 | |
|             color: Colors.white,
 | |
|             padding: const EdgeInsets.symmetric(horizontal: 50),
 | |
|             child: Row(
 | |
|               children: [
 | |
|                 TextButton(
 | |
|                     onPressed: () {
 | |
|                       controller.evaluateJavascript(source: JavaScriptString.clickJSString(600, 280) );
 | |
|                     },
 | |
|                     child: const Text('模拟点击测试')),
 | |
|                 TextButton(
 | |
|                     onPressed: () {
 | |
|                       mainController.evaluateJavascript(source: JavaScriptString.inputJsString(45) );
 | |
|                       controller.evaluateJavascript(source: JavaScriptString.inputJsString(45) );
 | |
|                     },
 | |
|                     child: const Text('模拟输入测试')),
 | |
|                 const SizedBox(
 | |
|                   width: 50,
 | |
|                   child: TextField(
 | |
|                     keyboardType: TextInputType.number,
 | |
|                     decoration: InputDecoration(prefixText: '网页数量'),
 | |
|                   ),
 | |
|                 )
 | |
|               ],
 | |
|             ),
 | |
|           ),
 | |
|           Expanded(child: pageViewWidget()),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget pageViewWidget() {
 | |
|     return PageView(
 | |
|       children: <Widget>[
 | |
|         KeepAlivePage(
 | |
|           child: WebWidget(controlerCallBack: (_mainController) {
 | |
|             mainController = _mainController;
 | |
|           
 | |
|             addClickEventJS();
 | |
|           }),
 | |
|         ),
 | |
|         KeepAlivePage(
 | |
|           child: WebWidget(controlerCallBack: (_controller) {
 | |
|             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;
 | |
|   }
 | |
| }
 |