4 changed files with 282 additions and 9 deletions
Unified 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