新增首次进入应用弹出隐私协议框

This commit is contained in:
Daisy 2024-03-09 15:57:25 +08:00
parent 4245996742
commit 83195c8ac2
4 changed files with 131 additions and 7 deletions

View File

@ -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';

View File

@ -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<StarLockApplication> {
@override
Widget build(BuildContext context) {
// return NavPages();
return const StarLockMainPage();
AppFirstEnterHandle().getAppFirstEnter(context);
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;
}
}

View 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); // 退
}
}

View File

@ -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<void> saveLoginData(LoginData? data) async {
await Storage.setString(saveUserLoginData, jsonEncode(data));
}
}