Compare commits

...

3 Commits

Author SHA1 Message Date
1147192855@qq.com dd033fd20f Merge branch 'main' into job_new_demand
# Conflicts:
#	marking_app/lib/pages/mainPage.dart
2024-04-16 17:44:21 +08:00
1147192855@qq.com dc53062556 no message 2024-04-16 17:38:31 +08:00
1147192855@qq.com fb23ba02d1 添加用户协议框和隐私框 2024-04-16 16:16:30 +08:00
4 changed files with 161 additions and 2 deletions

View File

@ -29,6 +29,7 @@ import 'package:marking_app/common/model/user/user_login.dart';
import 'package:marking_app/common/model/user/user_login_params.dart';
import 'package:marking_app/provider/user_provider.dart';
import 'package:marking_app/routes/RouterManager.dart';
import 'package:marking_app/utils/sys_protocol.dart';
class TheLogin extends StatefulHookConsumerWidget {
const TheLogin({Key? key}) : super(key: key);
@ -71,6 +72,7 @@ class _TheLoginState extends ConsumerState<TheLogin> with CommonMixin {
@override
void initState() {
Future.delayed(Duration(seconds: 3), () => sysProtocol(context));
Future(() {
// Provider
ref.read(userTokenProvider.notifier).clean(); //
@ -387,8 +389,7 @@ class _TheLoginState extends ConsumerState<TheLogin> with CommonMixin {
EasyLoading.show(status: 'loading...');
try {
BaseStructureResult<dynamic> resultData = await client.toLogin(UserLoginParams(userName, userPwdMd5));
UserLogin? userData =
resultData.code == 200 && resultData.data != null ? UserLogin.fromJson(resultData.data) : null;
UserLogin? userData = resultData.code == 200 && resultData.data != null ? UserLogin.fromJson(resultData.data) : null;
if (resultData.code != 200 || userData?.accessToken == null || userData?.accessToken == '') {
return toMsg(resultData.message ?? '登录失败,请重试');
}

View File

@ -27,6 +27,7 @@ import 'package:marking_app/pages/marking/index.dart';
import 'package:marking_app/provider/user_provider.dart';
import 'package:marking_app/utils/index.dart';
import 'package:marking_app/utils/request/rest_client.dart';
import 'package:marking_app/utils/sys_protocol.dart';
import 'package:package_info/package_info.dart';
import 'homework_correction/job_home.dart';
@ -69,6 +70,7 @@ class TheMainPageState extends ConsumerState<TheMainPage> with CommonMixin {
void initState() {
_pageController = PageController(initialPage: tabIndex);
_otherFocusNode = FocusNode();
Future.delayed(Duration(seconds: 1), () => sysProtocol(context));
// APP升级校验在登录后
_userListener = ref.read(userProvider.notifier).addListener((state) {
if (state.id != '0' && state.id != '') {

View File

@ -39,6 +39,8 @@ class FastData {
static const String _MARKING_PREFERENCES_WORK = "APP:MARKING:PREFERENCES:WORK";
// ==
static const String _INPUT_KEYBOARD_GUIDE_PAGE_WORK = "APP:MARKING:GUIDE_PAGE:WORK";
//
static const String _SYS_PROTOCOL = "APP:SYS:PROTOCOL";
static SharedPreferences? _prefs;
@ -268,4 +270,20 @@ class FastData {
SharedPreferences thePrefs = await getSharedInstance();
thePrefs.remove(_MARKING_ZOOM_SCALE_AND_POSITION);
}
/* 阅卷 ==> 缩放组件历史位置 */
Future<bool> setSysProtocol(bool val) async {
SharedPreferences thePrefs = await getSharedInstance();
return await thePrefs.setBool(_SYS_PROTOCOL, val);
}
Future<bool?> getSysProtocol([SharedPreferences? thePrefs]) async {
if (thePrefs == null) thePrefs = await getSharedInstance();
return thePrefs.getBool(_SYS_PROTOCOL);
}
void cleanSysProtocol() async {
SharedPreferences thePrefs = await getSharedInstance();
thePrefs.remove(_SYS_PROTOCOL);
}
}

View File

@ -0,0 +1,138 @@
import 'dart:io';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:marking_app/routes/RouterManager.dart';
import 'package:marking_app/utils/const_text.dart';
import 'index.dart';
import 'my_text.dart';
class Protocol extends Dialog {
final BuildContext context;
const Protocol(this.context);
@override
Widget build(BuildContext context) {
return Center(
child: Container(
width: isPad() ? 200.w : 260.w,
height: 400.h,
padding: EdgeInsets.symmetric(vertical: 16.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
children: <Widget>[
quickText('用户协议与隐私政策', size: 15.sp, color: Color.fromRGBO(37, 37, 37, 1), fontWeight: FontWeight.bold),
Expanded(
child: ListView(
physics: const BouncingScrollPhysics(),
padding: EdgeInsets.fromLTRB(16.w, 14.h, 16.w, 10.h),
children: [
Text.rich(TextSpan(children: [
TextSpan(
text: '感谢您选择学而有道APP ! 我们非常重视您的个人信息和隐私保护。为了更好地保障您的个人权益,在您使用我们的产品前,请务必审慎阅读',
style: TextStyle(fontSize: 13.sp, color: Color.fromRGBO(51, 51, 51, 1)),
),
TextSpan(
text: '《隐私政策》',
style: TextStyle(fontSize: 13.sp, color: Color.fromRGBO(233, 85, 119, 1)),
recognizer: TapGestureRecognizer()
..onTap = () async {
RouterManager.router.navigateTo(
context,
'${RouterManager.agreementPath}?type=${AGREEMENT_KEY.PRIVACY_GREEMENT.name}',
transition: getTransition(),
);
},
),
TextSpan(
text: '',
style: TextStyle(fontSize: 13.sp, color: Color.fromRGBO(51, 51, 51, 1)),
),
TextSpan(
text: '《用户协议》',
style: TextStyle(fontSize: 13.sp, color: Color.fromRGBO(233, 85, 119, 1)),
recognizer: TapGestureRecognizer()
..onTap = () async {
RouterManager.router.navigateTo(
context,
'${RouterManager.agreementPath}?type=${AGREEMENT_KEY.USER_AGREEMENT.name}',
transition: getTransition(),
);
},
),
TextSpan(
text:
'内的所有条款,尤其是:1.我们对您的个人信息的收集/保存/使用/对外提供/保护等规则条款,以及您的用户权利等条款;2.约定我们的限制责任、免责条款;3.其他以颜色或加粗进行标识的重要条款。如您对以上协议有任何疑问可通过人工客服或发邮件至xrydyj@outlook.com与我们联系。您点击"同意并继续”的行为即表示您已阅读完毕并同意以上协议的全部内容。如您同意以上协议内容,请点击"同意并继续”,开始使用我们的产品和服务!',
style: TextStyle(fontSize: 13.sp, color: Color.fromRGBO(51, 51, 51, 1)),
),
])),
],
),
),
Row(
children: [
Expanded(
child: InkWell(
onTap: () {
exit(0);
},
child: Container(
alignment: Alignment.center,
padding: EdgeInsets.only(top: 15.h),
decoration: BoxDecoration(
border: Border(
top: BorderSide(width: 0.5.r, color: Color.fromRGBO(238, 238, 238, 1)),
right: BorderSide(width: 0.5.r, color: Color.fromRGBO(238, 238, 238, 1)),
),
),
child: quickText('不同意', size: 14.sp),
),
),
),
Expanded(
child: InkWell(
onTap: () {
FastData.getInstance().setSysProtocol(true);
Navigator.of(context).pop(true);
},
child: Container(
alignment: Alignment.center,
padding: EdgeInsets.only(top: 15.h),
decoration: BoxDecoration(
border: Border(
top: BorderSide(width: 0.5.r, color: Color.fromRGBO(238, 238, 238, 1)),
),
),
child: quickText('同意并继续', color: Color.fromRGBO(206, 97, 126, 1), size: 14.sp),
),
),
)
],
),
],
),
),
);
}
}
///
void sysProtocol(BuildContext context) async {
bool? _sysProtocol = await FastData.getInstance().getSysProtocol();
if (_sysProtocol == null || !_sysProtocol) {
print('进来这里....');
showDialog(
context: context,
barrierDismissible: false,
builder: (ctx) {
return Protocol(ctx);
},
);
}
}