新增首次进入应用弹出隐私协议框
This commit is contained in:
parent
4245996742
commit
83195c8ac2
@ -1,8 +1,11 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/flavors.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 '../../appRouters.dart';
|
||||||
import '../../app_settings/app_colors.dart';
|
import '../../app_settings/app_colors.dart';
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
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';
|
import '../main/lockMian/lockMain/lockMain_page.dart';
|
||||||
|
|
||||||
|
|
||||||
class StarLockApplication extends StatefulWidget {
|
class StarLockApplication extends StatefulWidget {
|
||||||
const StarLockApplication({Key? key}) : super(key: key);
|
const StarLockApplication({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@ -12,11 +13,37 @@ class StarLockApplication extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _StarLockApplicationState extends State<StarLockApplication> {
|
class _StarLockApplicationState extends State<StarLockApplication> {
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// return NavPages();
|
AppFirstEnterHandle().getAppFirstEnter(context);
|
||||||
return const StarLockMainPage();
|
|
||||||
|
return FutureBuilder<bool>(
|
||||||
|
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<bool> getLoginStatus() async {
|
||||||
|
final data = await Storage.getString(saveUserLoginData);
|
||||||
|
if (data != null && data.isNotEmpty) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
94
star_lock/lib/tools/appFirstEnterHandle.dart
Normal file
94
star_lock/lib/tools/appFirstEnterHandle.dart
Normal file
@ -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); // 退出应用程序
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -15,6 +15,7 @@ const saveBlueToken = "BlueGetToken";
|
|||||||
const currentConnectionLockId = "CurrentConnectionLockId";
|
const currentConnectionLockId = "CurrentConnectionLockId";
|
||||||
const currentConnectionMacAddress = "CurrentConnectionMacAddress";
|
const currentConnectionMacAddress = "CurrentConnectionMacAddress";
|
||||||
const ifIsDemoModeOrNot = "IfIsDemoModeOrNot";
|
const ifIsDemoModeOrNot = "IfIsDemoModeOrNot";
|
||||||
|
const isFirstEnter = "isFirstEnter"; //是否首次进入应用
|
||||||
|
|
||||||
const saveUserLoginData = "userLoginData";
|
const saveUserLoginData = "userLoginData";
|
||||||
|
|
||||||
@ -182,5 +183,4 @@ class Storage {
|
|||||||
static Future<void> saveLoginData(LoginData? data) async {
|
static Future<void> saveLoginData(LoginData? data) async {
|
||||||
await Storage.setString(saveUserLoginData, jsonEncode(data));
|
await Storage.setString(saveUserLoginData, jsonEncode(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user