From 83195c8ac2b435a02bb375b592cbfe7fa11314c5 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Sat, 9 Mar 2024 15:57:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=A6=96=E6=AC=A1=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E5=BA=94=E7=94=A8=E5=BC=B9=E5=87=BA=E9=9A=90=E7=A7=81?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/login/login/starLock_login_page.dart | 3 + .../starLockApplication.dart | 39 ++++++-- star_lock/lib/tools/appFirstEnterHandle.dart | 94 +++++++++++++++++++ star_lock/lib/tools/storage.dart | 2 +- 4 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 star_lock/lib/tools/appFirstEnterHandle.dart diff --git a/star_lock/lib/login/login/starLock_login_page.dart b/star_lock/lib/login/login/starLock_login_page.dart index efc685b6..8b5d8438 100644 --- a/star_lock/lib/login/login/starLock_login_page.dart +++ b/star_lock/lib/login/login/starLock_login_page.dart @@ -1,8 +1,11 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; +import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; diff --git a/star_lock/lib/starLockApplication/starLockApplication.dart b/star_lock/lib/starLockApplication/starLockApplication.dart index 5f0c3ae4..e05ae1ea 100644 --- a/star_lock/lib/starLockApplication/starLockApplication.dart +++ b/star_lock/lib/starLockApplication/starLockApplication.dart @@ -1,9 +1,10 @@ - import 'package:flutter/material.dart'; +import 'package:star_lock/login/login/starLock_login_page.dart'; +import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/storage.dart'; import '../main/lockMian/lockMain/lockMain_page.dart'; - class StarLockApplication extends StatefulWidget { const StarLockApplication({Key? key}) : super(key: key); @@ -12,11 +13,37 @@ class StarLockApplication extends StatefulWidget { } class _StarLockApplicationState extends State { - - @override Widget build(BuildContext context) { - // return NavPages(); - return const StarLockMainPage(); + AppFirstEnterHandle().getAppFirstEnter(context); + + return FutureBuilder( + future: getLoginStatus(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + // 如果异步操作尚未完成,返回一个加载指示器或其他等待状态的小部件 + return const CircularProgressIndicator(); + } else if (snapshot.hasData) { + if (snapshot.data!) { + // 如果用户已登录,返回主页面 + return const StarLockMainPage(); + } else { + // 如果用户未登录,返回登录页面 + return const StarLockLoginPage(); + } + } else { + // 如果没有数据,返回一个空白的小部件 + return const StarLockLoginPage(); + } + }, + ); + } + + Future getLoginStatus() async { + final data = await Storage.getString(saveUserLoginData); + if (data != null && data.isNotEmpty) { + return true; + } + return false; } } diff --git a/star_lock/lib/tools/appFirstEnterHandle.dart b/star_lock/lib/tools/appFirstEnterHandle.dart new file mode 100644 index 00000000..65f6fc91 --- /dev/null +++ b/star_lock/lib/tools/appFirstEnterHandle.dart @@ -0,0 +1,94 @@ +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; +import 'package:star_lock/tools/storage.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class AppFirstEnterHandle { + Future getAppFirstEnter(BuildContext widgetContext) async { + var isFirstTime = await Storage.getString(isFirstEnter); + if (isFirstTime != isFirstEnter) { + showPrivacyAgreementAlert(widgetContext); + } + } + + //隐私协议弹窗 + void showPrivacyAgreementAlert(BuildContext widgetContext) { + showCupertinoDialog( + context: widgetContext, + builder: (context) { + return CupertinoAlertDialog( + title: const Text('用户协议和隐私政策概要\n'), + content: Text.rich( + TextSpan( + text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读', + style: const TextStyle(fontSize: 16.0), + children: [ + TextSpan( + text: '《用户协议》', + style: const TextStyle( + color: Colors.blue, decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () { + // 处理用户协议点击事件 + _launchURL(XSConstantMacro.userAgreementURL); + }, + ), + const TextSpan(text: '和'), + TextSpan( + text: '《隐私政策》', + style: const TextStyle( + color: Colors.blue, decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () { + // 处理隐私政策点击事件 + _launchURL(XSConstantMacro.privacyPolicyURL); + }, + ), + const TextSpan( + text: + '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'), + ], + ), + ), + actions: [ + CupertinoDialogAction( + child: const Text( + '不同意', + style: TextStyle(color: Colors.black), + ), + onPressed: () { + _exitApp(); + }, + ), + CupertinoDialogAction( + child: const Text( + '同意', + style: TextStyle(color: Colors.blue), + ), + onPressed: () { + Storage.setString(isFirstEnter, isFirstEnter); + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + _launchURL(String url) async { + if (await canLaunchUrl(Uri.parse(url))) { + await launchUrl(Uri.parse(url)); + } else { + throw '无法打开链接 $url'; + } + } + + void _exitApp() { + exit(0); // 退出应用程序 + } +} diff --git a/star_lock/lib/tools/storage.dart b/star_lock/lib/tools/storage.dart index bbbab709..4d42487d 100644 --- a/star_lock/lib/tools/storage.dart +++ b/star_lock/lib/tools/storage.dart @@ -15,6 +15,7 @@ const saveBlueToken = "BlueGetToken"; const currentConnectionLockId = "CurrentConnectionLockId"; const currentConnectionMacAddress = "CurrentConnectionMacAddress"; const ifIsDemoModeOrNot = "IfIsDemoModeOrNot"; +const isFirstEnter = "isFirstEnter"; //是否首次进入应用 const saveUserLoginData = "userLoginData"; @@ -182,5 +183,4 @@ class Storage { static Future saveLoginData(LoginData? data) async { await Storage.setString(saveUserLoginData, jsonEncode(data)); } - }