Browse Source

[Modify]修改支付宝二维码webview实现

zhipeng 6 months ago
parent
commit
8b3c8c0e1f
2 changed files with 20 additions and 51 deletions
  1. 20 19
      lib/dialog/alipay_qr_code_dialog.dart
  2. 0 32
      pubspec.lock

+ 20 - 19
lib/dialog/alipay_qr_code_dialog.dart

@@ -1,11 +1,12 @@
+import 'package:atmob_logging/atmob_logging.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:location/resource/assets.gen.dart';
 import 'package:location/resource/colors.gen.dart';
 import 'package:location/resource/string.gen.dart';
-import 'package:webview_flutter/webview_flutter.dart';
 
 class AlipayQrCodeDialog {
   static const String _tag = 'AlipayQrCodeDialog';
@@ -38,7 +39,7 @@ class AlipayQrCodeView extends Dialog {
   VoidCallback? loadSuccessCallback;
   VoidCallback? onCloseCallback;
 
-  final WebViewController webViewController = WebViewController();
+  InAppWebViewController? webViewController;
 
   AlipayQrCodeView(
       {super.key,
@@ -62,25 +63,25 @@ class AlipayQrCodeView extends Dialog {
                 SizedBox(
                   width: 220.w,
                   height: 220.w,
-                  child: WebViewWidget(
-                    controller: webViewController
-                      ..loadHtmlString(getHtmlTemplate())
-                      ..setJavaScriptMode(JavaScriptMode.unrestricted)
-                      ..setNavigationDelegate(NavigationDelegate(
-                        onPageFinished: (String url) {
-                          // 使用 CSS 放大页面内容
-                          final scaleFactor = Get.width / 45.w;
-                          webViewController.runJavaScript('''
-                         document.body.style.transform = "scale($scaleFactor)";
-                         document.body.style.transformOrigin = "0 0";  
-                         
+                  child: GestureDetector(
+                    behavior: HitTestBehavior.translucent,
+                    child: InAppWebView(
+                      initialData:
+                          InAppWebViewInitialData(data: getHtmlTemplate()),
+                      onPageCommitVisible: (controller, url) {
+                        ALog.d("lzplzp", "onPageCommitVisible ${url?.host}");
+                        if (url?.host.contains("alipay.com") ?? false) {
+                          loadSuccessCallback?.call();
+                          final scaleFactor = Get.width / 40.w;
+                          controller.evaluateJavascript(source: '''
+                          document.body.style.transform = "scale($scaleFactor)";
+                        document.body.style.transformOrigin = "0 0";  
                         document.body.style.touchAction = 'none';
                         document.documentElement.style.overscrollBehavior = 'none';           
-                      ''');
-                          loadSuccessCallback?.call();
-                          loadSuccessCallback = null;
-                        },
-                      )),
+                          ''');
+                        }
+                      },
+                    ),
                   ),
                 ),
                 SizedBox(height: 16.w),

+ 0 - 32
pubspec.lock

@@ -1351,38 +1351,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "3.0.2"
-  webview_flutter:
-    dependency: "direct main"
-    description:
-      name: webview_flutter
-      sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "4.10.0"
-  webview_flutter_android:
-    dependency: transitive
-    description:
-      name: webview_flutter_android
-      sha256: "512c26ccc5b8a571fd5d13ec994b7509f142ff6faf85835e243dde3538fdc713"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "4.3.2"
-  webview_flutter_platform_interface:
-    dependency: transitive
-    description:
-      name: webview_flutter_platform_interface
-      sha256: "18b1640839cf6546784a524c72aded5b6e86b23e7167dc2311cc96f7658b64bd"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "2.11.0"
-  webview_flutter_wkwebview:
-    dependency: transitive
-    description:
-      name: webview_flutter_wkwebview
-      sha256: c9f9be526fa0d3347374ceaa05c4b3acb85f4f112abd62f7d74b7d301fa515ff
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "3.20.0"
   wechat_kit:
     dependency: "direct main"
     description: