import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:get/get.dart'; import 'package:hgdj/hj_page/mine/mine_vip/pay_order_source.dart'; import 'package:hgdj/routers/jump_router.dart'; class H5Logic extends GetxController { // ========== 属性声明 ========== final String? url; H5Logic({this.url}); InAppWebViewController? webViewCtr; // url 兜底空字符串,防 null 强解包崩溃 URLRequest get initialUrlRequest => URLRequest(url: WebUri(url ?? '')); // ========== 公开方法 ========== void onWebViewCreated(InAppWebViewController controller) { webViewCtr = controller; _setupHandlers(controller); } // ========== 私有方法 ========== // 注册 H5 与 native 的 JS 桥 void _setupHandlers(InAppWebViewController controller) { controller.addJavaScriptHandler( handlerName: 'prizeBack', callback: (_) => Get.back()); controller.addJavaScriptHandler( handlerName: 'shopBack', callback: (_) => Get.back()); // 跳金币充值 controller.addJavaScriptHandler( handlerName: 'shopCharge', callback: (_) => pushToWalletPage( tabPosition: 1, sourcePage: PaySourcePage.h5Activity), ); // H5 触发外部链接跳转 controller.addJavaScriptHandler( handlerName: 'jumpOutLink', callback: (args) { if (args.isNotEmpty && args[0] is String) { pushToPageByLink(args[0] as String); } }, ); // H5 触发:直接跳系统外部浏览器(callHandler('openOutLink', url)) controller.addJavaScriptHandler( handlerName: 'openOutLink', callback: (args) { if (args.isNotEmpty && args[0] is String) { launchUrlToWeb(args[0] as String); } }, ); } }