Просмотр исходного кода

[new]新增启动隐私政策弹窗

Destiny 1 год назад
Родитель
Сommit
7bbdd0162f

+ 57 - 5
ios/Podfile.lock

@@ -1,12 +1,19 @@
 PODS:
+  - audio_session (0.0.1):
+    - Flutter
+  - connectivity_plus (0.0.1):
+    - Flutter
+    - FlutterMacOS
   - Flutter (1.0.0)
+  - just_audio (0.0.1):
+    - Flutter
   - MMKV (1.3.9):
     - MMKVCore (~> 1.3.9)
   - mmkv_ios (1.0.3):
     - Flutter
     - MMKV (< 2.0, >= 1.3.9)
   - MMKVCore (1.3.9)
-  - package_info (0.0.1):
+  - package_info_plus (0.4.5):
     - Flutter
   - path_provider_foundation (0.0.1):
     - Flutter
@@ -14,13 +21,34 @@ PODS:
   - record_darwin (1.0.0):
     - Flutter
     - FlutterMacOS
+  - sqflite (0.0.3):
+    - Flutter
+    - FlutterMacOS
+  - url_launcher_ios (0.0.1):
+    - Flutter
+  - video_player_avfoundation (0.0.1):
+    - Flutter
+    - FlutterMacOS
+  - wakelock_plus (0.0.1):
+    - Flutter
+  - webview_flutter_wkwebview (0.0.1):
+    - Flutter
+    - FlutterMacOS
 
 DEPENDENCIES:
+  - audio_session (from `.symlinks/plugins/audio_session/ios`)
+  - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
   - Flutter (from `Flutter`)
+  - just_audio (from `.symlinks/plugins/just_audio/ios`)
   - mmkv_ios (from `.symlinks/plugins/mmkv_ios/ios`)
-  - package_info (from `.symlinks/plugins/package_info/ios`)
+  - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
   - record_darwin (from `.symlinks/plugins/record_darwin/ios`)
+  - sqflite (from `.symlinks/plugins/sqflite/darwin`)
+  - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
+  - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
+  - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
+  - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`)
 
 SPEC REPOS:
   trunk:
@@ -28,25 +56,49 @@ SPEC REPOS:
     - MMKVCore
 
 EXTERNAL SOURCES:
+  audio_session:
+    :path: ".symlinks/plugins/audio_session/ios"
+  connectivity_plus:
+    :path: ".symlinks/plugins/connectivity_plus/darwin"
   Flutter:
     :path: Flutter
+  just_audio:
+    :path: ".symlinks/plugins/just_audio/ios"
   mmkv_ios:
     :path: ".symlinks/plugins/mmkv_ios/ios"
-  package_info:
-    :path: ".symlinks/plugins/package_info/ios"
+  package_info_plus:
+    :path: ".symlinks/plugins/package_info_plus/ios"
   path_provider_foundation:
     :path: ".symlinks/plugins/path_provider_foundation/darwin"
   record_darwin:
     :path: ".symlinks/plugins/record_darwin/ios"
+  sqflite:
+    :path: ".symlinks/plugins/sqflite/darwin"
+  url_launcher_ios:
+    :path: ".symlinks/plugins/url_launcher_ios/ios"
+  video_player_avfoundation:
+    :path: ".symlinks/plugins/video_player_avfoundation/darwin"
+  wakelock_plus:
+    :path: ".symlinks/plugins/wakelock_plus/ios"
+  webview_flutter_wkwebview:
+    :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
 
 SPEC CHECKSUMS:
+  audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
+  connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
   Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
+  just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
   MMKV: 817ba1eea17421547e01e087285606eb270a8dcb
   mmkv_ios: 51a53dffa3e2bb8b743762514c754666abab2a6c
   MMKVCore: af055b00e27d88cd92fad301c5fecd1ff9b26dd9
-  package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
+  package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
   path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
   record_darwin: df0a677188e5fed18472550298e675f19ddaffbe
+  sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
+  url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
+  video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
+  wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
+  webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
 
 PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
 

+ 9 - 3
lib/module/login/controller.dart

@@ -1,6 +1,8 @@
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/data/consts/constants.dart';
 import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/dialog/alert_dialog.dart';
+import 'package:electronic_assistant/module/browser/view.dart';
 import 'package:electronic_assistant/utils/error_handler.dart';
 import 'package:electronic_assistant/utils/expand.dart';
 import 'package:electronic_assistant/utils/toast_util.dart';
@@ -60,7 +62,9 @@ class LoginController extends BaseController {
               ),
             ),
             GestureDetector(
-              onTap: () {},
+              onTap: () {
+                BrowserPage.start(Constants.privacyPolicy);
+              },
               child: Text(
                 "《隐私政策》",
                 textAlign: TextAlign.center,
@@ -81,9 +85,11 @@ class LoginController extends BaseController {
               ),
             ),
             GestureDetector(
-              onTap: () {},
+              onTap: () {
+                BrowserPage.start(Constants.userAgreement);
+              },
               child: Text(
-                "《用户试用协议》",
+                "《用户使用协议》",
                 textAlign: TextAlign.center,
                 style: TextStyle(
                   color: "#5E8BFF".toColor(),

+ 90 - 0
lib/module/splash/controller.dart

@@ -0,0 +1,90 @@
+import 'dart:async';
+import 'dart:io';
+
+import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/data/consts/constants.dart';
+import 'package:electronic_assistant/module/browser/view.dart';
+import 'package:electronic_assistant/router/app_pages.dart';
+import 'package:electronic_assistant/utils/expand.dart';
+import 'package:electronic_assistant/utils/mmkv_util.dart';
+import 'package:electronic_assistant/widget/alert_dialog.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/gestures.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+
+class SplashController extends BaseController {
+  final splashDelayedTime = 2;
+
+  @override
+  void onReady() {
+    // TODO: implement onInit
+    super.onReady();
+
+    final isAgreePrivacy = KVUtil.getBool('isAgreePrivacyKey', false);
+    if (isAgreePrivacy) {
+      Timer(Duration(seconds: splashDelayedTime), () {
+        Get.offNamed(RoutePath.mainTab);
+      });
+    } else {
+      EAAlertDialog.show(
+        title: "隐私政策及权限说明",
+        contentWidget: RichText(
+          textAlign: TextAlign.left,
+          text: TextSpan(
+            style: TextStyle(
+              color: "#5F5F61".toColor(),
+              fontSize: 14,
+              decoration: TextDecoration.none,
+            ),
+            children: [
+              const TextSpan(
+                text:
+                    "为了更好地为您服务,我们可能向系统申请一些必要权限,用于基本服务和功能。我们非常重视您的隐私和个人信息,请使用之前请仔细阅读",
+              ),
+              TextSpan(
+                text: "《隐私政策》",
+                style: TextStyle(
+                  color: "#5E8BFF".toColor(),
+                  decoration: TextDecoration.none,
+                ),
+                recognizer: TapGestureRecognizer()
+                  ..onTap = () {
+                    BrowserPage.start(Constants.privacyPolicy);
+                  },
+              ),
+              const TextSpan(
+                text: "和",
+              ),
+              TextSpan(
+                text: "《用户使用协议》",
+                style: TextStyle(
+                  color: "#5E8BFF".toColor(),
+                  decoration: TextDecoration.none,
+                ),
+                recognizer: TapGestureRecognizer()
+                  ..onTap = () {
+                    BrowserPage.start(Constants.userAgreement);
+                  },
+              ),
+              const TextSpan(
+                text: "。同意后,我们将继续为您服务。",
+              ),
+            ],
+          ),
+        ),
+        cancelText: "不同意",
+        confirmText: "同意并继续",
+        cancelOnTap: () {
+          EAAlertDialog.dismiss();
+          exit(0);
+        },
+        confirmOnTap: () {
+          EAAlertDialog.dismiss();
+          KVUtil.putBool('isAgreePrivacyKey', true);
+          Get.offNamed(RoutePath.mainTab);
+        },
+      );
+    }
+  }
+}

+ 8 - 6
lib/module/splash/view.dart

@@ -1,24 +1,26 @@
 import 'dart:async';
+import 'dart:io';
 
 import 'package:electronic_assistant/base/base_page.dart';
 import 'package:electronic_assistant/dialog/alert_dialog.dart';
+import 'package:electronic_assistant/module/splash/controller.dart';
 import 'package:electronic_assistant/resource/assets.gen.dart';
+import 'package:electronic_assistant/utils/expand.dart';
+import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 
 import '../../router/app_pages.dart';
 
-class SplashPage extends BasePage {
-  const SplashPage({super.key});
+class SplashPage extends BasePage<SplashController> {
+  SplashPage({super.key});
 
-  final splashDelayedTime = 2;
+  @override
+  final SplashController controller = Get.put(SplashController());
 
   @override
   Widget buildBody(BuildContext context) {
-    Timer(Duration(seconds: splashDelayedTime), () {
-      Get.offNamed(RoutePath.mainTab);
-    });
     return _buildSplash();
   }
 

+ 3 - 1
lib/router/app_pages.dart

@@ -6,6 +6,7 @@ import 'package:electronic_assistant/module/files/search/controller.dart';
 import 'package:electronic_assistant/module/main/controller.dart';
 import 'package:electronic_assistant/module/main/drawer/controller.dart';
 import 'package:electronic_assistant/module/record/controller.dart';
+import 'package:electronic_assistant/module/splash/controller.dart';
 import 'package:electronic_assistant/module/store/controller.dart';
 import 'package:electronic_assistant/module/store/view.dart';
 import 'package:electronic_assistant/module/talk/controller.dart';
@@ -65,6 +66,7 @@ class AppBinding extends Bindings {
   @override
   void dependencies() {
     lazyPut(() => MainController());
+    lazyPut(() => SplashController());
     lazyPut(() => HomePageController());
     lazyPut(() => LoginController());
     lazyPut(() => TaskController());
@@ -88,7 +90,7 @@ class AppBinding extends Bindings {
 }
 
 final generalPages = [
-  GetPage(name: RoutePath.splash, page: () => const SplashPage()),
+  GetPage(name: RoutePath.splash, page: () => SplashPage()),
   GetPage(name: RoutePath.login, page: () => const LoginPage()),
   GetPage(name: RoutePath.mainTab, page: () => MainTabPage()),
   GetPage(name: RoutePath.files, page: () => const FilesPage()),