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 createState() => _MainPageState(); } class _MainPageState extends State { late InAppWebViewController mainController; late InAppWebViewController controller; bool asyncState = false; @override void initState() { super.initState(); } @override void dispose() { super.dispose(); WebStorageManager.instance().deleteAllData(); } /// 注入触摸监听 addTouchendEventJS(){ final clickJsUS = UserScript(groupName: 'touchend',source: JavaScriptString.touchendEventJSString, injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START); mainController.addUserScript(userScript: clickJsUS); mainController.addJavaScriptHandler(handlerName: 'touchend', callback: (args){ if (asyncState){ int x = double.parse(args.first.toString()).toInt(); int y = double.parse(args.last.toString()).toInt(); controller.evaluateJavascript(source: JavaScriptString.clickJSString(x, y) ); // controller.evaluateJavascript(source: JavaScriptString.touchendJsString(x, y) ); // controller.evaluateJavascript(source: JavaScriptString.getClassTouchendJsString(x, y) ); } }); } @override Widget build(BuildContext context) { return Scaffold( body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( height: 50, color: Colors.white, padding: const EdgeInsets.symmetric(horizontal: 50), child: Row( children: [ TextButton( onPressed: () { controller.evaluateJavascript(source: JavaScriptString.clickJSString(50, 100) ); }, child: const Text('模拟点击测试')), TextButton( onPressed: () { mainController.evaluateJavascript(source: JavaScriptString.inputJsString(45) ); controller.evaluateJavascript(source: JavaScriptString.inputJsString(45) ); }, child: const Text('模拟输入测试')), Row( children: [ const Text('同步'), Switch(value: asyncState, onChanged: (value){ setState(() { asyncState = value; }); }) ], ) ], ), ), Expanded(child: pageViewWidget()), ], ), ); } Widget pageViewWidget() { return Row( children: [ Expanded( child: Container( color: Colors.yellow, child: KeepAlivePage( child: WebWidget(controlerCallBack: (_mainController) { mainController = _mainController; addTouchendEventJS(); }), ), ), ), Expanded( child: Container( color: Colors.blue, child: 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 with AutomaticKeepAliveClientMixin { @override bool get wantKeepAlive => true; @override Widget build(BuildContext context) { super.build(context); return widget.child; } }