4 changed files with 282 additions and 9 deletions
Split View
Diff Options
-
7ios/Podfile.lock
-
61lib/main.dart
-
10lib/pages/mine/open_webview.dart
-
213lib/widget/user_agreement_dialog.dart
@ -0,0 +1,213 @@ |
|||
import 'package:dating_touchme_app/pages/mine/open_webview.dart'; |
|||
import 'package:flutter/gestures.dart'; |
|||
import 'package:flutter/material.dart'; |
|||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|||
import 'package:get/get.dart'; |
|||
|
|||
class UserAgreementDialog extends StatefulWidget { |
|||
final VoidCallback onAgree; |
|||
final VoidCallback onDisagree; |
|||
|
|||
const UserAgreementDialog({ |
|||
super.key, |
|||
required this.onAgree, |
|||
required this.onDisagree, |
|||
}); |
|||
|
|||
@override |
|||
State<UserAgreementDialog> createState() => _UserAgreementDialogState(); |
|||
} |
|||
|
|||
class _UserAgreementDialogState extends State<UserAgreementDialog> { |
|||
late TapGestureRecognizer _userAgreementRecognizer; |
|||
late TapGestureRecognizer _privacyPolicyRecognizer; |
|||
|
|||
@override |
|||
void initState() { |
|||
super.initState(); |
|||
_userAgreementRecognizer = TapGestureRecognizer() |
|||
..onTap = () { |
|||
Get.to(() => const OpenWebView( |
|||
url: "https://www.quzhaoqin.com/privacy.html", |
|||
title: "用户协议", |
|||
)); |
|||
}; |
|||
_privacyPolicyRecognizer = TapGestureRecognizer() |
|||
..onTap = () { |
|||
Get.to(() => const OpenWebView( |
|||
url: "https://www.quzhaoqin.com/information.html", |
|||
title: "隐私政策", |
|||
)); |
|||
}; |
|||
} |
|||
|
|||
@override |
|||
void dispose() { |
|||
_userAgreementRecognizer.dispose(); |
|||
_privacyPolicyRecognizer.dispose(); |
|||
super.dispose(); |
|||
} |
|||
|
|||
@override |
|||
Widget build(BuildContext context) { |
|||
return Material( |
|||
color: Colors.transparent, |
|||
child: Container( |
|||
width: double.infinity, |
|||
height: double.infinity, |
|||
color: Colors.black.withOpacity(0.5), |
|||
child: Center( |
|||
child: Container( |
|||
margin: EdgeInsets.symmetric(horizontal: 40.w), |
|||
decoration: BoxDecoration( |
|||
color: Colors.white, |
|||
borderRadius: BorderRadius.circular(12.r), |
|||
), |
|||
child: Column( |
|||
mainAxisSize: MainAxisSize.min, |
|||
children: [ |
|||
// 标题 |
|||
Container( |
|||
padding: EdgeInsets.symmetric(vertical: 20.h), |
|||
child: Text( |
|||
'用户协议及隐私政策', |
|||
style: TextStyle( |
|||
fontSize: 18.sp, |
|||
fontWeight: FontWeight.bold, |
|||
color: Colors.black, |
|||
), |
|||
), |
|||
), |
|||
// 协议内容区域 |
|||
Flexible( |
|||
child: Container( |
|||
margin: EdgeInsets.symmetric(horizontal: 16.w), |
|||
constraints: BoxConstraints( |
|||
maxHeight: MediaQuery.of(context).size.height * 0.5, |
|||
), |
|||
child: SingleChildScrollView( |
|||
child: _buildAgreementContent(), |
|||
), |
|||
), |
|||
), |
|||
SizedBox(height: 20.h), |
|||
// 按钮区域 |
|||
Container( |
|||
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h), |
|||
child: Row( |
|||
children: [ |
|||
// 不同意按钮 |
|||
Expanded( |
|||
child: _buildDisagreeButton(), |
|||
), |
|||
SizedBox(width: 12.w), |
|||
// 同意按钮 |
|||
Expanded( |
|||
child: _buildAgreeButton(), |
|||
), |
|||
], |
|||
), |
|||
), |
|||
], |
|||
), |
|||
), |
|||
), |
|||
), |
|||
); |
|||
} |
|||
|
|||
Widget _buildAgreementContent() { |
|||
return RichText( |
|||
text: TextSpan( |
|||
style: TextStyle( |
|||
fontSize: 14.sp, |
|||
color: Colors.black87, |
|||
height: 1.5, |
|||
), |
|||
children: [ |
|||
const TextSpan(text: '欢迎使用趣恋恋。\n\n'), |
|||
const TextSpan(text: '在使用本应用前,请你仔细阅读并充分理解\n'), |
|||
TextSpan( |
|||
text: '《用户协议》', |
|||
style: TextStyle( |
|||
fontSize: 14.sp, |
|||
color: const Color.fromRGBO(74, 99, 235, 1), |
|||
), |
|||
recognizer: _userAgreementRecognizer, |
|||
), |
|||
const TextSpan(text: ' 和 '), |
|||
TextSpan( |
|||
text: '《隐私政策》', |
|||
style: TextStyle( |
|||
fontSize: 14.sp, |
|||
color: const Color.fromRGBO(74, 99, 235, 1), |
|||
), |
|||
recognizer: _privacyPolicyRecognizer, |
|||
), |
|||
const TextSpan(text: '。\n\n'), |
|||
const TextSpan(text: '我们将严格按照协议内容使用并保护你的个人信息。\n\n'), |
|||
const TextSpan(text: '点击「同意」即表示你已阅读并同意上述协议。'), |
|||
], |
|||
), |
|||
); |
|||
} |
|||
|
|||
Widget _buildDisagreeButton() { |
|||
return InkWell( |
|||
onTap: widget.onDisagree, |
|||
borderRadius: BorderRadius.circular(8.r), |
|||
child: Container( |
|||
height: 44.h, |
|||
decoration: BoxDecoration( |
|||
border: Border.all( |
|||
color: const Color.fromRGBO(131, 89, 255, 1), |
|||
width: 1, |
|||
), |
|||
borderRadius: BorderRadius.circular(8.r), |
|||
), |
|||
child: Center( |
|||
child: Text( |
|||
'不同意', |
|||
style: TextStyle( |
|||
fontSize: 16.sp, |
|||
color: const Color.fromRGBO(131, 89, 255, 1), |
|||
fontWeight: FontWeight.w500, |
|||
), |
|||
), |
|||
), |
|||
), |
|||
); |
|||
} |
|||
|
|||
Widget _buildAgreeButton() { |
|||
return InkWell( |
|||
onTap: widget.onAgree, |
|||
borderRadius: BorderRadius.circular(8.r), |
|||
child: Container( |
|||
height: 44.h, |
|||
decoration: BoxDecoration( |
|||
gradient: const LinearGradient( |
|||
colors: [ |
|||
Color.fromRGBO(131, 89, 255, 1), |
|||
Color.fromRGBO(61, 138, 224, 1), |
|||
], |
|||
begin: Alignment.centerLeft, |
|||
end: Alignment.centerRight, |
|||
), |
|||
borderRadius: BorderRadius.circular(8.r), |
|||
), |
|||
child: Center( |
|||
child: Text( |
|||
'同意', |
|||
style: TextStyle( |
|||
fontSize: 16.sp, |
|||
color: Colors.white, |
|||
fontWeight: FontWeight.w500, |
|||
), |
|||
), |
|||
), |
|||
), |
|||
); |
|||
} |
|||
} |
|||
|
|||
Write
Preview
Loading…
Cancel
Save