Browse Source

1.添加 Stripe 依赖。
2.需要升级到 Gradle 8.0才能运行 Stripe 插件。
3.Android 的编译等依赖全部升级并运行测试。
4.部分第三方插件的 gradle 的 namespace 的问题,Html插件的相关版本升级并且重构封装控件WebViewPage。
5.Android 升级到target 35 之后可以升级到 permission 插件的最新版本。
6.运行与打包的测试通过。

liukai 2 weeks ago
parent
commit
54ef86ff74
34 changed files with 195 additions and 203 deletions
  1. 22 16
      app/android/app/build.gradle
  2. 4 4
      app/android/app/src/main/AndroidManifest.xml
  3. 4 2
      app/android/app/src/main/kotlin/com/hongyegroup/property_management/MainActivity.java
  4. 1 1
      app/android/app/src/main/kotlin/com/hongyegroup/property_management/MyApplication.kt
  5. 0 0
      app/android/app/src/main/kotlin/com/hongyegroup/app24ifm/RouterActivity.java
  6. 2 2
      app/android/app/src/main/res/values-night/styles.xml
  7. 2 2
      app/android/app/src/main/res/values/styles.xml
  8. 1 1
      app/android/gradle/wrapper/gradle-wrapper.properties
  9. 2 2
      app/android/settings.gradle
  10. 19 15
      app/lib/main.dart
  11. 2 1
      app/pubspec.yaml
  12. 2 1
      packages/cpt_auth/pubspec.yaml
  13. 2 1
      packages/cpt_community/pubspec.yaml
  14. 2 1
      packages/cpt_facility/pubspec.yaml
  15. 20 4
      packages/cpt_form/lib/modules/apply/vm/apply_view_model.dart
  16. 2 1
      packages/cpt_form/pubspec.yaml
  17. 2 1
      packages/cpt_main/pubspec.yaml
  18. 2 1
      packages/cpt_notice_board/pubspec.yaml
  19. 2 1
      packages/cpt_payment/pubspec.yaml
  20. 2 1
      packages/cpt_profile/pubspec.yaml
  21. 2 1
      packages/cpt_property/pubspec.yaml
  22. 2 1
      packages/cpt_rewards/pubspec.yaml
  23. 2 1
      packages/cpt_services/pubspec.yaml
  24. 2 1
      packages/cs_domain/pubspec.yaml
  25. 2 1
      packages/cs_initializer/pubspec.yaml
  26. 72 129
      packages/cs_plugin_basic/lib/widget/webview_page.dart
  27. 2 1
      packages/cs_plugin_basic/pubspec.yaml
  28. 1 1
      packages/cs_plugin_platform/lib/platform_export.dart
  29. 4 3
      packages/cs_plugin_platform/pubspec.yaml
  30. 2 1
      packages/cs_resources/pubspec.yaml
  31. 2 1
      packages/cs_router/pubspec.yaml
  32. 2 1
      packages/cs_shared/pubspec.yaml
  33. 3 2
      packages/cs_widgets/pubspec.yaml
  34. 2 1
      pubspec.yaml

+ 22 - 16
app/android/app/build.gradle

@@ -24,19 +24,17 @@ if (flutterRoot == null) {
     throw new Exception("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
 }
 
-// 模拟器运行报错时尝试开启此项
-// project.setProperty('target-platform', 'android-arm')
-
 android {
-    compileSdkVersion 34
+    namespace 'com.hongyegroup.app24ifm'
+    compileSdk 35
 
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_11
-        targetCompatibility JavaVersion.VERSION_11
+        sourceCompatibility JavaVersion.VERSION_17
+        targetCompatibility JavaVersion.VERSION_17
     }
 
     kotlinOptions {
-        jvmTarget = JavaVersion.VERSION_11
+        jvmTarget = JavaVersion.VERSION_17
     }
 
     sourceSets {
@@ -49,11 +47,12 @@ android {
     }
 
     defaultConfig {
-        applicationId "com.hongyegroup.proanperty_management"
+        applicationId "com.hongyegroup.app24ifm"
         minSdkVersion 21
-        targetSdkVersion 34
-        versionCode 100          //Android打包上线记得要加固并重新签名再传
+        targetSdkVersion 35
+        versionCode 100
         versionName "1.0.0"
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         multiDexEnabled true
 
@@ -91,8 +90,6 @@ android {
             signingConfig signingConfigs.release
             //默认系统混淆
             minifyEnabled true
-            // 不显示Log
-            buildConfigField "boolean", "LOG_DEBUG", "false"
             //是否可调试
             debuggable false
             //Zipalign优化
@@ -113,14 +110,23 @@ flutter {
     source '../..'
 }
 
+// 覆盖所有子模块的命名空间规则
+subprojects {
+    afterEvaluate { project ->
+        if (project.hasProperty("android") && project.android.namespace == null) {
+            project.android.namespace = "com.hongyegroup.app24ifm.${project.name}"
+        }
+    }
+}
+
 dependencies {
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0"
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0"
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0"
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0"
 
     implementation 'com.github.bumptech.glide:glide:4.11.0'
     kapt 'com.github.bumptech.glide:compiler:4.11.0'
 
-    implementation 'androidx.appcompat:appcompat:1.3.1'  //加入AndroidX依赖
+    implementation 'androidx.appcompat:appcompat:1.6.1'  //加入AndroidX依赖
     implementation 'com.android.support:multidex:1.0.3'
 //    implementation 'androidx.core:core-splashscreen:1.0.0' //启动12兼容
-}
+}

+ 4 - 4
app/android/app/src/main/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.hongyegroup.property_management">
+    package="com.hongyegroup.app24ifm">
 
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
@@ -39,7 +39,7 @@
     </queries>
 
     <application
-        android:name="android.app.src.main.kotlin.com.hongyegroup.property_management.MyApplication"
+        android:name="android.app.src.main.kotlin.com.hongyegroup.app24ifm.MyApplication"
         android:allowBackup="false"
         android:icon="@mipmap/ic_launcher"
         android:label="24IFM"
@@ -48,7 +48,7 @@
         android:usesCleartextTraffic="true">
 
         <activity
-            android:name="android.app.src.main.kotlin.com.hongyegroup.property_management.MainActivity"
+            android:name="android.app.src.main.kotlin.com.hongyegroup.app24ifm.MainActivity"
             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
             android:exported="true"
             android:hardwareAccelerated="true"
@@ -128,7 +128,7 @@
     </queries>
 
     <!-- Android 11 使用相机适配  -->
-    <queries package="com.monstarlab.yyjobs">
+    <queries package="com.hongyegroup.app24ifm">
         <intent>
             <action android:name="android.media.action.IMAGE_CAPTURE">
 

+ 4 - 2
app/android/app/src/main/kotlin/com/hongyegroup/property_management/MainActivity.java

@@ -1,4 +1,4 @@
-package android.app.src.main.kotlin.com.hongyegroup.property_management;
+package android.app.src.main.kotlin.com.hongyegroup.app24ifm;
 
 import android.os.Bundle;
 import android.util.Log;
@@ -9,11 +9,12 @@ import androidx.annotation.Nullable;
 //import androidx.core.splashscreen.SplashScreen;
 
 import io.flutter.embedding.android.FlutterActivity;
+import io.flutter.embedding.android.FlutterFragmentActivity;
 import io.flutter.embedding.engine.FlutterEngine;
 import io.flutter.plugin.common.MethodChannel;
 import android.os.Build;
 
-public class MainActivity extends FlutterActivity {
+public class MainActivity extends FlutterFragmentActivity {
 
 //    private SplashScreen mSplashScreen;
     @Override
@@ -34,6 +35,7 @@ public class MainActivity extends FlutterActivity {
             //返回安卓版本
            if (call.method.equals("getAndroidSdkInt")) {
                result.success(Build.VERSION.SDK_INT);
+
             } else if (call.method.equals("getNativeRouterName")) {
                 // 获取当前需要跳转的子路由
                 Log.d("MainActivity", "执行 methodChannel -> getNativeRouterName");

+ 1 - 1
app/android/app/src/main/kotlin/com/hongyegroup/property_management/MyApplication.kt

@@ -1,4 +1,4 @@
-package android.app.src.main.kotlin.com.hongyegroup.property_management
+package android.app.src.main.kotlin.com.hongyegroup.app24ifm
 
 import android.content.Context
 import androidx.multidex.MultiDex

app/android/app/src/main/kotlin/com/hongyegroup/property_management/RouterActivity.java → app/android/app/src/main/kotlin/com/hongyegroup/app24ifm/RouterActivity.java


+ 2 - 2
app/android/app/src/main/res/values-night/styles.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
-    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
+    <style name="LaunchTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
         <!-- Show a splash screen on the activity. Automatically removed when
              Flutter draws its first frame -->
         <item name="android:windowBackground">@drawable/launch_background</item>
@@ -12,7 +12,7 @@
          running.
 
          This Theme is only used starting with V2 of Flutter's Android embedding. -->
-    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
+    <style name="NormalTheme" parent="Theme.MaterialComponents">
         <item name="android:windowBackground">?android:colorBackground</item>
     </style>
 

+ 2 - 2
app/android/app/src/main/res/values/styles.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
-    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
+    <style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar">
         <!-- Show a splash screen on the activity. Automatically removed when
              Flutter draws its first frame -->
         <item name="android:windowBackground">@drawable/launch_background</item>
@@ -12,7 +12,7 @@
          running.
 
          This Theme is only used starting with V2 of Flutter's Android embedding. -->
-    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
+    <style name="NormalTheme" parent="Theme.MaterialComponents">
         <item name="android:windowBackground">?android:colorBackground</item>
     </style>
 

+ 1 - 1
app/android/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
 #Sun Jan 24 20:08:12 CST 2021
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME

+ 2 - 2
app/android/settings.gradle

@@ -23,8 +23,8 @@ pluginManagement {
 
 plugins {
     id "dev.flutter.flutter-plugin-loader" version "1.0.0"
-    id "com.android.application" version "7.1.2" apply false
-    id "org.jetbrains.kotlin.android" version "1.8.0" apply false
+    id "com.android.application" version "8.7.3" apply false
+    id "org.jetbrains.kotlin.android" version "1.9.0" apply false
 }
 
 include ":app"

+ 19 - 15
app/lib/main.dart

@@ -13,10 +13,10 @@ import 'package:plugin_basic/constants/app_constant.dart';
 import 'package:plugin_basic/provider/app_config/app_config_service.dart';
 import 'package:plugin_basic/provider/global_provider_container.dart';
 import 'package:plugin_platform/engine/sp/sp_util.dart';
+import 'package:plugin_platform/platform_export.dart';
 import 'package:router/componentRouter/component_service_manager.dart';
 import 'package:cpt_profile/router/component/profile_service_provider.dart';
 import 'package:plugin_basic/obs/my_navigator_observer.dart';
-import 'package:shared/utils/device_utils.dart';
 import 'package:shared/utils/log_utils.dart';
 import 'package:widgets/dialog/custom_toast_widget.dart';
 import 'package:widgets/dialog/custom_error_widget.dart';
@@ -41,6 +41,10 @@ void main() async {
   //交给初始化构造器去统一初始化
   await AppInitializer.initializeRunalone();
 
+  // Stripe 公钥
+  // Stripe.publishableKey = 'pk_test_51RMmxaRpg7SPAcNndAqMUMEOkRFsY5mL0JqJmdunL3vspxrYsGjGARQddaVu3ZQVEy1e1WTF8yalt0cYZCY8sK9R0005VIg5mC';
+  // await Stripe.instance.applySettings();
+
   //组件路由的注入
   ComponentServiceManager()
     ..addServiceProvider(mainServiceProvider)
@@ -118,20 +122,20 @@ class MyApp extends HookConsumerWidget {
     int? darkModel = SPUtil.getInt(AppConstant.storageDarkModel, defValue: 0);
     late SystemUiOverlayStyle systemUiOverlayStyle;
 
-      //根据SP存入的暗色模式,指定全局页面的状态栏,导航栏等设置
-      switch (darkModel) {
-        case 1:
-          Log.d("main.dart - 指定亮色模式");
-          systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleLightThemeBlack;
-          break;
-        case 2:
-          Log.d("main.dart - 指定暗色模式");
-          systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleDarkTheme;
-          break;
-        default:
-          systemUiOverlayStyle = ThemeConfig.getSystemUiOverlayStyleByTheme(context);
-          break;
-      }
+    //根据SP存入的暗色模式,指定全局页面的状态栏,导航栏等设置
+    switch (darkModel) {
+      case 1:
+        Log.d("main.dart - 指定亮色模式");
+        systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleLightThemeBlack;
+        break;
+      case 2:
+        Log.d("main.dart - 指定暗色模式");
+        systemUiOverlayStyle = ThemeConfig.systemUiOverlayStyleDarkTheme;
+        break;
+      default:
+        systemUiOverlayStyle = ThemeConfig.getSystemUiOverlayStyleByTheme(context);
+        break;
+    }
 
     SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
 

+ 2 - 1
app/pubspec.yaml

@@ -4,7 +4,8 @@ description: Flutter Room 临时项目
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_auth/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的用户模块,用户的登录注册、密码信息
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_community/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的社区模块,用于展示动态朋友圈与个人
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_facility/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的设施模块,用于展示物业的公用设施的
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 20 - 4
packages/cpt_form/lib/modules/apply/vm/apply_view_model.dart

@@ -171,9 +171,25 @@ class ApplyViewModel extends _$ApplyViewModel with DioCancelableMixin {
 
     //TODO 测试Stripe支付
     // Stripe.instance.initPaymentSheet(paymentSheetParameters: paymentSheetParameters)
-    // PaymentIntent pi = await Stripe.instance.confirmPayment(
-    //   paymentIntentClientSecret: 'pi_3RNlYBRpg7SPAcNn1CwGxP7e',
-    // );
-    // Log.d("测试Stripe支付 pi:$pi");
+
+    // 使用 Stripe 收集支付信息
+    // final paymentMethod = await Stripe.instance.createPaymentMethod( params: PaymentMethodParams.card(paymentMethodData: PaymentMethodData.card()));
+
+    PaymentIntent paymentIntentResult = await Stripe.instance.confirmPayment(
+      paymentIntentClientSecret: 'pi_3RNlYBRpg7SPAcNn1CwGxP7e',
+      data: PaymentMethodParams.card(
+        paymentMethodData: PaymentMethodData(
+          billingDetails: BillingDetails(
+            email: 'liukai2530533@163.com', // 用户邮箱(可选)
+          ),
+        ),
+      ),
+    );
+
+    if (paymentIntentResult.status == PaymentIntentsStatus.Succeeded) {
+      ToastEngine.show('Payment successful!');
+    } else {
+      NotifyEngine.showError('Payment failed: ${paymentIntentResult.status}');
+    }
   }
 }

+ 2 - 1
packages/cpt_form/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的表单模块,用于展示后端配置的各种表
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_main/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的主模块,用于首页,设置等页面
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_notice_board/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的公告板模块,用于展示物业发布的各类
 version: 1.0.0
 
 environment:
-  sdk: ">=3.0.2 <4.0.0"
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
   flutter_localizations:

+ 2 - 1
packages/cpt_payment/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的支付模块,主要展示用户待支付账单与
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_profile/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的用户详情模块,主要展示用户的详细信
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_property/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的资产模块,主要展示用户的房子价值,
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_rewards/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的积分兑换奖励功能,主要是签到得积分
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cpt_services/pubspec.yaml

@@ -4,7 +4,8 @@ description: 物业系统的服务广告,主要是各类广告的功能
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cs_domain/pubspec.yaml

@@ -4,7 +4,8 @@ description: 项目的实体,数据仓库等
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cs_initializer/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,用于给底层依赖组件服务或者第三方插件
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 72 - 129
packages/cs_plugin_basic/lib/widget/webview_page.dart

@@ -45,14 +45,80 @@ class _WebViewPageState extends State<WebViewPage> {
     _showAppbar = widget.showAppbar ?? true;
     Log.d("传入的initialUrl:${widget.initialUrl}");
     _initialUrl = widget.initialUrl ?? widget.arguments!['initialUrl'];
-    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
+
+    _initializeController();
+  }
+
+  void _initializeController() {
+    webViewController = WebViewController()
+      ..setJavaScriptMode(JavaScriptMode.unrestricted)
+      ..setBackgroundColor(const Color(0x00000000))
+      ..setNavigationDelegate(
+        NavigationDelegate(
+          onProgress: (int progress) {
+            if (progress == 100) {
+              Future.delayed(const Duration(milliseconds: 500)).then((value) => {
+                    // 获取页面高度
+                    _getWebViewHeight()
+                  });
+            }
+          },
+          onPageStarted: (String url) {
+            if (mounted) {
+              setState(() {
+                _stackToView = 1;
+              });
+            }
+          },
+          onPageFinished: (String url) {
+            if (mounted) {
+              setState(() {
+                _stackToView = 0;
+              });
+            }
+          },
+          onWebResourceError: (WebResourceError error) {},
+          onNavigationRequest: (NavigationRequest request) async {
+            if (request.url.startsWith('tel:')) {
+              // 拦截tel链接
+              if (!await launchUrl(Uri.parse(request.url))) throw 'Unable to activate the call function';
+              return NavigationDecision.prevent; // 阻止WebView导航到该链接
+            }
+            return NavigationDecision.navigate;
+          },
+        ),
+      )
+      ..loadRequest(Uri.parse(_initialUrl ?? ""));
+  }
+
+  _getWebViewHeight() async {
+    // try {
+    //   final result = await webViewController?.runJavaScriptReturningResult('''
+    //   new Promise((resolve) => {
+    //     const scrollHeight = document.documentElement.scrollHeight;
+    //     resolve(scrollHeight);
+    //   });
+    // ''');
+    //   return double.parse(result.toString());
+    // } catch (e) {
+    //   return 300.0; // 默认高度
+    // }
+
+    // 方式二:
+    var originalHeight = await webViewController?.runJavaScriptReturningResult("document.body.offsetHeight;");
+    _webViewHeight = double.parse(originalHeight.toString());
+    if (mounted) {
+      setState(() {
+        _webViewHeight = _webViewHeight <= 0 ? 300 : _webViewHeight;
+      });
+    }
   }
 
   @override
   void dispose() async {
     super.dispose();
     // 销毁 WebView 实例
-    webViewController?.loadUrl('about:blank');
+    webViewController?.loadHtmlString('about:blank');
     webViewController?.clearCache();
   }
 
@@ -64,80 +130,6 @@ class _WebViewPageState extends State<WebViewPage> {
     }
   }
 
-  // 注册js回调
-  _invokeJavascriptChannel(BuildContext context) {
-    return [
-      JavascriptChannel(
-        name: 'Invoke',
-        onMessageReceived: (JavascriptMessage message) {
-          // var webHeight = double.parse(message.message);
-          // setState(() {
-          //   print('打印webHeight:$_webViewHeight');
-          //   _webViewHeight = webHeight;
-          // });
-        },
-      ),
-      JavascriptChannel(
-        name: 'Invoke1',
-        onMessageReceived: (JavascriptMessage message) {
-          // var devicePixelRatio = double.parse(message.message);
-          // setState(() {
-          // _webViewHeight = devicePixelRatio;
-          // });
-        },
-      ),
-      JavascriptChannel(
-        name: "integral",
-        onMessageReceived: (JavascriptMessage message) {
-          // print("交互");
-          // print("参数: ${message.message}");
-          // Map res = changeStringToJsonMap(message.message);
-          // print(res["operation"]);
-          // _controller?.evaluateJavascript("getAddressBook('sdad')");
-        },
-      ),
-      JavascriptChannel(
-        name: "MessageDeal",
-        onMessageReceived: (JavascriptMessage message) async {
-          // print("交互");
-          // print("参数: ${message.message}");
-          // print(webViewController);
-          // webViewController
-          //     ?.runJavascriptReturningResult("showMessage('我(Flutter)收到了你的消息)");
-          // _controller?.evaluateJavascript("document.title");
-        },
-      ),
-      JavascriptChannel(
-        name: "callWithDict",
-        onMessageReceived: (JavascriptMessage message) {
-          // print("交互");
-          // print("参数: ${message.message}");
-        },
-      ),
-    ];
-  }
-
-  // 获取页面高度
-  _getWebViewHeight() async {
-    // 方式一:
-    // await webViewController?.runJavascriptReturningResult('''
-    //     try {
-    //       // Invoke.postMessage([document.body.clientHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight]);
-    //       let scrollHeight = document.documentElement.scrollHeight;
-    //       if (scrollHeight) {
-    //         Invoke.postMessage(scrollHeight);
-    //       }
-    //     } catch {}
-    //     ''');
-    // 方式二:
-    var originalHeight = await webViewController!.runJavascriptReturningResult("document.body.offsetHeight;");
-    _webViewHeight = double.parse(originalHeight);
-    setState(() {
-      _webViewHeight = _webViewHeight <= 0 ? 300 : _webViewHeight;
-    });
-    // print('网页高度-----' + _webViewHeight.toString());
-  }
-
   // 返回与后退的处理
   Future<bool> _onWillPop() async {
     if (webViewController == null) {
@@ -180,70 +172,21 @@ class _WebViewPageState extends State<WebViewPage> {
               IndexedStack(
                 index: _stackToView,
                 children: [
+                  //WebView控件
                   Column(
                     children: [
                       Expanded(
                         child: WillPopScope(
                           onWillPop: _onWillPop,
-                          child: WebView(
+                          child: WebViewWidget(
                             key: _key,
-                            initialUrl: _initialUrl!.startsWith("http")
-                                ? _initialUrl
-                                : Uri.dataFromString(
-                                    _initialUrl!,
-                                    mimeType: 'text/html',
-                                    encoding: Encoding.getByName('utf-8'),
-                                  ).toString(),
-
-                            userAgent: '',
-                            //JS执行模式 是否允许JS执行
-                            javascriptMode: JavascriptMode.unrestricted,
-                            //webview创建好
-                            onWebViewCreated: (WebViewController controller) {
-                              webViewController = controller;
-                            },
-                            onProgress: (int progress) {
-                              // print('progress=====>$progress');
-                              if (progress == 100) {
-                                Future.delayed(const Duration(milliseconds: 500)).then((value) => {
-                                      // 获取页面高度
-                                      _getWebViewHeight()
-                                    });
-                              }
-                            },
-                            onPageStarted: (String url) {
-                              // print('onPageStarted=====>$url');
-                            },
-                            onPageFinished: (String url) {
-                              Log.d('onPageFinished=====>$url');
-                              if (mounted) {
-                                setState(() {
-                                  _stackToView = 0;
-                                });
-                              }
-                            },
-                            onWebResourceError: (WebResourceError error) {
-                              // print('error=====>$error');
-                            },
-                            gestureNavigationEnabled: true,
-                            // 注册js 回调
-                            javascriptChannels: _invokeJavascriptChannel(context).toSet(),
-                            navigationDelegate: (NavigationRequest request) async {
-                              //如果是tel标签需要阻止并调用 launchUrl 的方法调用拨打电话
-                              if (request.url.startsWith('tel:')) {
-                                // 拦截tel链接
-                                if (!await launchUrl(Uri.parse(request.url))) throw '无法启动拨打电话功能';
-                                return NavigationDecision.prevent; // 阻止WebView导航到该链接
-                              }
-
-                              // 可以继续WebView的内部跳转
-                              return NavigationDecision.navigate;
-                            },
+                            controller: webViewController!,
                           ),
                         ),
                       )
                     ],
                   ),
+                  //Loading加载控件
                   Container(
                     color: Colors.white,
                     child: const Center(

+ 2 - 1
packages/cs_plugin_basic/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,原生的封装控件,扩展控件,自定义控件
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 1 - 1
packages/cs_plugin_platform/lib/platform_export.dart

@@ -2,4 +2,4 @@ export 'package:dio/dio.dart';
 export 'package:permission_handler/permission_handler.dart';
 export 'engine/image/image_nine_grid.dart';
 export 'engine/media/image_picker_utils.dart';
-// export 'package:flutter_stripe/flutter_stripe.dart';
+export 'package:flutter_stripe/flutter_stripe.dart';

+ 4 - 3
packages/cs_plugin_platform/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,原生的封装控件,扩展控件,自定义控件
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 
@@ -35,7 +36,7 @@ dependencies:
   dio: 5.3.3
 
   #处理权限
-  permission_handler: 11.3.1
+  permission_handler: 12.0.0+1
 
   # 图片选择  https://github.com/fluttercandies/flutter_wechat_assets_picker/blob/main/README-ZH.md
   wechat_assets_picker: ^9.2.2
@@ -79,7 +80,7 @@ dependencies:
   win32: 5.5.4
 
   #Stripe支付
-#  flutter_stripe: 11.5.0
+  flutter_stripe: 10.2.0
 
 flutter:
   uses-material-design: true

+ 2 - 1
packages/cs_resources/pubspec.yaml

@@ -4,7 +4,8 @@ description: 整体项目的资源,颜色,图片,字体等
 version: 1.0.0
 
 environment:
-  sdk: ">=3.0.2 <4.0.0"
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
   flutter_localizations:

+ 2 - 1
packages/cs_router/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,用于提供路由与路由相关逻辑
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 2 - 1
packages/cs_shared/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,提供基本的全局的工具类与服务类
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 

+ 3 - 2
packages/cs_widgets/pubspec.yaml

@@ -4,7 +4,8 @@ description: 基础包,原生的封装控件,扩展控件,自定义控件
 version: 1.0.0
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
 
@@ -41,7 +42,7 @@ dependencies:
   hooks_riverpod: ^2.5.1
 
   # WebView插件 https://github.com/flutter/plugins/tree/master/packages/webview_flutter
-  webview_flutter: ^3.0.4
+  webview_flutter: ^4.10.0
   # 如何使用?WebviewScaffold 整体WebView带上下结构布局
   #          FlutterWebviewPlugin  单独的WebView插件
   # https://pub.dev/packages/flutter_webview_plugin#-readme-tab

+ 2 - 1
pubspec.yaml

@@ -3,7 +3,8 @@ version: 1.0.0
 description: HongYeGroup物业管理系统
 
 environment:
-  sdk: '>=3.0.2 <4.0.0'
+  sdk: ">=3.3.0 <4.0.0"
+  flutter: ">=3.0.0"
 
 dependencies:
   flutter_lints: ^2.0.1