Browse Source

排版预览,聊天设置,举报,玫瑰充值,历史页面,优化页面

master
YakumoChen 4 months ago
parent
commit
a184d8be98
15 changed files with 2402 additions and 374 deletions
  1. 9
      android/app/src/main/AndroidManifest.xml
  2. BIN
      assets/rose_banner.png
  3. 826
      lib/pages/edit_info_page.dart
  4. 170
      lib/pages/live_room_page.dart
  5. 179
      lib/pages/message_page.dart
  6. 194
      lib/pages/message_setting_page.dart
  7. 113
      lib/pages/my_page.dart
  8. 162
      lib/pages/pay_history_page.dart
  9. 443
      lib/pages/report_page.dart
  10. 395
      lib/pages/rose_page.dart
  11. 4
      lib/pages/signature_page.dart
  12. 239
      lib/pages/tag_setting_page.dart
  13. 2
      lib/pages/user_info_page.dart
  14. 30
      lib/router/app_router.dart
  15. 10
      lib/router/route_paths.dart

9
android/app/src/main/AndroidManifest.xml

@ -1,6 +1,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
@ -9,6 +12,12 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" />
<!-- The Agora SDK requires Bluetooth permissions in case users are using Bluetooth devices. -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- For Android 12 and above devices, the following permission is also required. -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<application
android:label="动我"
android:name="${applicationName}"

BIN
assets/rose_banner.png

Before After
Width: 1400  |  Height: 644  |  Size: 826 KiB

826
lib/pages/edit_info_page.dart

@ -15,6 +15,20 @@ class _EditInfoPageState extends State<EditInfoPage> {
int menuActive = 1;
List<String> imgList = [
"https://fastly.picsum.photos/id/64/800/800.jpg?hmac=NBZ4_-vqzD6p25oCeaW0H5vH-ql9zzei-SqJNeUo1QU",
"https://fastly.picsum.photos/id/985/800/800.jpg?hmac=DfRt99HFbMJ96DlN-poOhruWYRsexESE94ilLC3g1rU",
"https://fastly.picsum.photos/id/703/800/800.jpg?hmac=-bRTkPxnsiQ5kCo2tfXj6tFrXMD7YnVx7bQ0STno3Tg"
];
int nowSelect = 0;
List<String> tagList = [
"北京", "160cm", "想要甜甜的恋爱", "本科", "朋友圈摄影师", "英雄联盟", "流放之路",
"CF", "DNA", "堡垒之夜", "SCP"
];
@override
Widget build(BuildContext context) {
return Scaffold(
@ -43,7 +57,7 @@ class _EditInfoPageState extends State<EditInfoPage> {
),
child: Center(
child: Text(
"预览",
"编辑",
style: TextStyle(
fontSize: 27.w,
color: menuActive == 1 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(144, 144, 144, 1)
@ -84,284 +98,600 @@ class _EditInfoPageState extends State<EditInfoPage> {
),
],
),
SizedBox(height: 52.w,),
Stack(
children: [
SizedBox(
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(170.w)),
child: Image.asset(
"assets/user_avatar.png",
width: 170.w,
height: 170.w,
if(menuActive == 1) ...[
SizedBox(height: 52.w,),
Stack(
children: [
SizedBox(
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(170.w)),
child: Image.asset(
"assets/user_avatar.png",
width: 170.w,
height: 170.w,
),
),
),
),
Positioned(
right: 17.w,
bottom: 2.w,
child: Image.asset(
"assets/edit_avatar.png",
width: 34.w,
height: 34.w,
),
)
],
),
SizedBox(height: 41.w,),
Container(
width: 750.w,
padding: EdgeInsets.only(
left: 29.w,
right: 40.w
Positioned(
right: 17.w,
bottom: 2.w,
child: Image.asset(
"assets/edit_avatar.png",
width: 34.w,
height: 34.w,
),
)
],
),
child: Column(
children: [
Row(
children: [
Text(
"个人相册",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
)
],
),
SizedBox(height: 10.w,),
Container(
width: 681.w,
margin: EdgeInsets.only(bottom: 70.w),
child: Wrap(
spacing: 10.w,
runSpacing: 10.w,
SizedBox(height: 41.w,),
Container(
width: 750.w,
padding: EdgeInsets.only(
left: 29.w,
right: 40.w
),
child: Column(
children: [
Row(
children: [
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/1003/400/400.jpg?hmac=aA6suLuxF9UGDuOSzWauxOJBgBT0XeUFVqMIIjO4hJU",
width: 141.w,
height: 141.w,
Text(
"个人相册",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/342/400/400.jpg?hmac=u_p3Kwp2J2A0XENzZfDKmtTzLjqsxLF48EUgImcL6v8",
width: 141.w,
height: 141.w,
)
],
),
SizedBox(height: 10.w,),
Container(
width: 681.w,
margin: EdgeInsets.only(bottom: 70.w),
child: Wrap(
spacing: 10.w,
runSpacing: 10.w,
children: [
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/1003/400/400.jpg?hmac=aA6suLuxF9UGDuOSzWauxOJBgBT0XeUFVqMIIjO4hJU",
width: 141.w,
height: 141.w,
),
),
),
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/935/400/400.jpg?hmac=d-_aU-UWnAMEk7lMRmhv-yD1sBBeSmiQ9fbTmcQqDT4",
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/342/400/400.jpg?hmac=u_p3Kwp2J2A0XENzZfDKmtTzLjqsxLF48EUgImcL6v8",
width: 141.w,
height: 141.w,
),
),
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
child: Image.network(
"https://fastly.picsum.photos/id/935/400/400.jpg?hmac=d-_aU-UWnAMEk7lMRmhv-yD1sBBeSmiQ9fbTmcQqDT4",
width: 141.w,
height: 141.w,
),
),
Container(
width: 141.w,
height: 141.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
border: Border.all(width: 1, color: const Color.fromRGBO(224, 224, 224, 1))
),
child: Center(
child: Icon(
Icons.add,
size: 30.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
),
)
],
),
),
Row(
children: [
Text(
"基本信息",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
Container(
width: 141.w,
height: 141.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
border: Border.all(width: 1, color: const Color.fromRGBO(224, 224, 224, 1))
)
],
),
SizedBox(height: 5.w,),
SetItem(label: "昵称",),
Container(
margin: EdgeInsets.only(bottom: 6.w),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1))
)
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: "性别",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
)
),
]
),
),
Row(
children: [
Text(
"",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(width: 30.w,),
Image.asset(
"assets/male.png",
width: 26.w,
height: 26.w,
color: const Color.fromRGBO(218, 218, 218, 1)
)
],
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: "生日",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
)
),
TextSpan(
text: "*",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(224, 54, 54, 1),
fontWeight: FontWeight.w500
)
),
]
),
),
Row(
children: [
Text(
"1989-06-30",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(width: 30.w,),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
)
],
),
],
),
),
SetItem(label: "身高",),
SetItem(label: "所在地", showRequired: false,),
SetItem(label: "家乡",),
SetItem(label: "学历",),
SetItem(label: "职业",),
SetItem(label: "公司", showRequired: false,),
SetItem(label: "月收入",),
SetItem(label: "婚姻状况", showRequired: false,),
SetItem(label: "有无房产", showRequired: false,),
SizedBox(height: 16.w,),
InkWell(
onTap: (){
context.pushNamed(RouteNames.signature);
},
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"交友心声",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
),
child: Center(
child: Icon(
Icons.add,
size: 30.w,
color: const Color.fromRGBO(144, 144, 144, 1),
Container(
margin: EdgeInsets.only(bottom: 6.w),
padding: EdgeInsets.only(bottom: 24.w),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1))
)
),
child: Text(
"拒绝内耗,向阳而生,用热爱抵御岁月漫长,用真诚对待每一次相遇拒绝内耗,向阳而生,用热爱抵御岁月漫长,用真诚对待每一次相遇",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
),
],
),
),
InkWell(
onTap: (){
context.pushNamed(RouteNames.tagSetting);
},
child: SetItem(label: "个性标签", showRequired: false,),
),
SizedBox(height: 16.w,),
Row(
children: [
Text(
"交友范围",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
)
],
),
SizedBox(height: 5.w,),
SetItem(label: "所在地", showRequired: false,),
SetItem(label: "年龄", showRequired: false,),
SetItem(label: "身高", showRequired: false,),
SetItem(label: "最低学历", showRequired: false,),
SetItem(label: "最低月收入", showRequired: false,),
],
),
),
],
if(menuActive == 2) ...[
Stack(
children: [
Image.network(
imgList[nowSelect],
width: 750.w,
height: 769.w,
fit: BoxFit.cover,
),
Row(
children: [
Text(
"基本信息",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(top: 723.w),
child: Container(
height: 1334.h - 723.w - 98.w - MediaQuery.of(context).padding.top - 108.w,
width: 750.w,
padding: EdgeInsets.only(
top: 62.w,
left: 31.w,
right: 48.w
),
)
],
),
SizedBox(height: 5.w,),
SetItem(label: "昵称",),
Container(
margin: EdgeInsets.only(bottom: 6.w),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1))
)
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
decoration: BoxDecoration(
borderRadius: BorderRadius.vertical(
top: Radius.circular(46.w)
),
color: Colors.white
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RichText(
text: TextSpan(
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
TextSpan(
text: "性别",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
)
Text(
"晨晨子",
style: TextStyle(
fontSize: 38.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w600
),
),
SizedBox(width: 27.w,),
Container(
width: 66.w,
height: 26.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(26.w)),
color: const Color.fromRGBO(255, 237, 255, 1)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/female.png",
width: 17.w,
height: 17.w,
),
SizedBox(width: 2.w,),
Text(
"19",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(255, 66, 236, 1)
),
)
],
),
),
]
SizedBox(width: 6.w,),
Container(
width: 66.w,
height: 26.w,
margin: EdgeInsets.only(right: 5.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(26.w)),
color: const Color.fromRGBO(234, 255, 219, 1)
),
child: Center(
child: Text(
"在线",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(38, 199, 124, 1)
),
),
),
),
SizedBox(width: 8.w,),
Container(
width: 87.w,
height: 26.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(26.w)),
color: const Color.fromRGBO(246, 237, 255, 1)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/real_name.png",
width: 16.w,
height: 14.w,
),
SizedBox(width: 5.w,),
Text(
"实名",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(160, 92, 255, 1)
),
)
],
),
),
SizedBox(width: 8.w,),
Container(
width: 66.w,
height: 26.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(26.w)),
color: const Color.fromRGBO(237, 245, 255, 1)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/male.png",
width: 17.w,
height: 17.w,
),
SizedBox(width: 2.w,),
Text(
"19",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(120, 140, 255, 1)
),
)
],
),
),
],
),
Container(
width: 127.w,
height: 54.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(54.w)),
color: const Color.fromRGBO(117, 98, 249, .1)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/player.png",
width: 31.w,
height: 31.w,
),
SizedBox(width: 8.w,),
Image.asset(
"assets/voice.png",
width: 31.w,
height: 27.w,
),
SizedBox(width: 8.w,),
Text(
"6'",
style: TextStyle(
fontSize: 23.w,
color: const Color.fromRGBO(117, 98, 249, 1)
),
)
],
),
)
],
),
SizedBox(height: 16.w,),
Text(
"父母催婚找个结婚的",
style: TextStyle(
fontSize: 23.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
Row(
SizedBox(height: 23.w,),
Wrap(
spacing: 15.w,
runSpacing: 15.w,
children: [
Text(
"",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(width: 30.w,),
Image.asset(
"assets/male.png",
width: 26.w,
height: 26.w,
color: const Color.fromRGBO(218, 218, 218, 1)
)
...tagList.map((e){
return TagItem(label: e);
}),
],
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: "生日",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
)
),
TextSpan(
text: "*",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(224, 54, 54, 1),
fontWeight: FontWeight.w500
)
),
]
),
SizedBox(height: 33.w,),
Text(
"IP属地:广东",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
Text(
"动我ID:16099665",
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"1989-06-30",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
Container(
width: 493.w,
height: 76.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(76.w)),
color: const Color.fromRGBO(51, 51, 51, 1)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/chat_btn.png",
width: 26.w,
height: 24.w,
),
SizedBox(width: 8.w,),
Text(
"发消息",
style: TextStyle(
fontSize: 31.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
)
],
),
),
Container(
width: 162.w,
height: 76.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(76.w)),
color: const Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"关注",
style: TextStyle(
fontSize: 31.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
),
),
),
SizedBox(width: 30.w,),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
)
],
),
],
),
),
),
SetItem(label: "身高",),
SetItem(label: "所在地", showRequired: false,),
SetItem(label: "家乡",),
SetItem(label: "学历",),
SetItem(label: "职业",),
SetItem(label: "公司", showRequired: false,),
SetItem(label: "月收入",),
SetItem(label: "婚姻状况", showRequired: false,),
SetItem(label: "有无房产", showRequired: false,),
SizedBox(height: 16.w,),
InkWell(
onTap: (){
context.pushNamed(RouteNames.signature);
},
child: Column(
Positioned(
left: 31.w,
top: 627.w,
child: Row(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"交友心声",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
...imgList.asMap().entries.map((entry){
return Container(
margin: EdgeInsets.only(right: 15.w),
child: InkWell(
onTap: (){
nowSelect = entry.key;
setState(() {
});
},
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(15.w)),
child: Container(
width: 81.w,
height: 81.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(15.w)),
border: nowSelect == entry.key ? Border.all(width: 2.w, color: Colors.white) : null
),
child: Center(
child: Image.network(
entry.value,
width: 77.w,
height: 77.w,
),
),
),
),
),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
),
Container(
margin: EdgeInsets.only(bottom: 6.w),
padding: EdgeInsets.only(bottom: 24.w),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1))
)
),
child: Text(
"拒绝内耗,向阳而生,用热爱抵御岁月漫长,用真诚对待每一次相遇拒绝内耗,向阳而生,用热爱抵御岁月漫长,用真诚对待每一次相遇",
style: TextStyle(
fontSize: 26.w,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
),
);
}),
],
),
),
SetItem(label: "个性标签", showRequired: false,),
SizedBox(height: 16.w,),
Row(
children: [
Text(
"交友范围",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
)
],
),
SizedBox(height: 5.w,),
SetItem(label: "所在地", showRequired: false,),
SetItem(label: "年龄", showRequired: false,),
SetItem(label: "身高", showRequired: false,),
SetItem(label: "最低学历", showRequired: false,),
SetItem(label: "最低月收入", showRequired: false,),
],
),
)
)
]
],
),
),
@ -441,3 +771,29 @@ class _SetItemState extends State<SetItem> {
}
}
class TagItem extends StatelessWidget {
final String label;
const TagItem({super.key, required this.label});
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(
vertical: 4.w,
horizontal: 12.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(27.w)),
color: const Color.fromRGBO(245, 247, 255, 1)
),
child: Text(
label,
style: TextStyle(
fontSize: 23.w,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
);
}
}

170
lib/pages/live_room_page.dart

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:roundcheckbox/roundcheckbox.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
class LiveRoomPage extends StatefulWidget {
final int id;
@ -27,7 +28,7 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
{"icon": "assets/gift5.png", "title": "崇拜衣柜", "price": 30},
];
int giftNum = 1;
final giftNum = ValueNotifier<int>(1);
final activePay = ValueNotifier<int?>(null);
List<Map> payList = [
@ -1195,12 +1196,28 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
),
),
Expanded(
child: Wrap(
children: [
...giftList.asMap().entries.map((entry){
return GiftItem(item: entry.value, active: active ?? 0, index: entry.key, changeActive: changeActive);
}),
],
child: Swiper(
autoplay: false,
itemCount: 6,
loop: true,
pagination: const SwiperPagination(
alignment: Alignment.bottomCenter,
builder: TDSwiperDotsPagination(
color: Color.fromRGBO(144, 144, 144, 1),
activeColor: Color.fromRGBO(77, 77, 77, 1),
)),
itemBuilder: (BuildContext context, int index) {
return Align(
alignment: Alignment.topCenter,
child: Wrap(
children: [
...giftList.asMap().entries.map((entry){
return GiftItem(item: entry.value, active: active ?? 0, index: entry.key, changeActive: changeActive);
}),
],
),
);
},
),
),
Container(
@ -1231,43 +1248,114 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
),
],
) ,
Row(
children: [
TDStepper(
theme: TDStepperTheme.filled,
value: giftNum,
min: 1,
onChange: (e){
giftNum = e;
},
),
SizedBox(width: 18.w,),
Container(
width: 127.w,
height: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(60.w)),
gradient: LinearGradient(
begin: Alignment.centerLeft, //
end: Alignment.centerRight, // 90
colors: [
Color.fromRGBO(61, 138, 224, 1), //
Color.fromRGBO(131, 89, 255, 1), //
],
ValueListenableBuilder<int>(
valueListenable: giftNum,
builder: (context, num, _) {
return Row(
children: [
// TDStepper(
// theme: TDStepperTheme.filled,
// value: giftNum,
// min: 1,
// onChange: (e){
// giftNum = e;
// },
// ),
InkWell(
onTap: (){
if(giftNum.value <= 1) return;
giftNum.value -= 1;
setState(() {
});
},
child: Container(
width: 29.w,
height: 29.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(29.w)),
color: Color.fromRGBO(117, 98, 249, giftNum.value <= 1 ? 0 : 1),
border: Border.all(width: 1, color: Color.fromRGBO(117, 98, 249, 1))
),
child: Center(
child: Text(
"-",
style: TextStyle(
fontSize: 26.w,
color: giftNum.value <= 1 ? Color.fromRGBO(117, 98, 249, 1) : Colors.white,
height: 1
),
),
),
),
),
),
child: Center(
child: Text(
"赠送",
style: TextStyle(
fontSize: 26.w,
color: Colors.white
SizedBox(
width: 46.w,
child: Center(
child: Text(
"$num",
style: TextStyle(
fontSize: 26.w,
color: Colors.white
),
),
),
),
),
)
],
)
InkWell(
onTap: (){
giftNum.value += 1;
setState(() {
});
},
child: Container(
width: 29.w,
height: 29.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(29.w)),
color: Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"+",
style: TextStyle(
fontSize: 26.w,
color: Colors.white,
height: 1
),
),
),
),
),
SizedBox(width: 18.w,),
Container(
width: 127.w,
height: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(60.w)),
gradient: LinearGradient(
begin: Alignment.centerLeft, //
end: Alignment.centerRight, // 90
colors: [
Color.fromRGBO(61, 138, 224, 1), //
Color.fromRGBO(131, 89, 255, 1), //
],
),
),
child: Center(
child: Text(
"赠送",
style: TextStyle(
fontSize: 26.w,
color: Colors.white
),
),
),
)
],
);
}),
],
),
)

179
lib/pages/message_page.dart

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:dating_touchme_app/components/chat_message.dart';
import 'package:dating_touchme_app/components/my_message.dart';
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:dating_touchme_app/router/route_paths.dart';
import 'package:dating_touchme_app/utils/utils.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
@ -10,9 +11,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter/foundation.dart' as foundation;
import 'package:go_router/go_router.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'package:image_picker/image_picker.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
class MessagePage extends StatefulWidget {
final int id;
@ -48,7 +51,7 @@ class _MessagePageState extends State<MessagePage> with TickerProviderStateMixi
{"icon": "assets/gift5.png", "title": "崇拜衣柜", "price": 30},
];
int giftNum = 1;
final giftNum = ValueNotifier<int>(1);
@ -170,6 +173,9 @@ class _MessagePageState extends State<MessagePage> with TickerProviderStateMixi
appBar: PageAppbar(title: "林园园", right: Container(
margin: EdgeInsets.only(right: 28.w),
child: InkWell(
onTap: (){
context.pushNamed(RouteNames.messageSetting);
},
child: Image.asset(
"assets/menu_icon.png",
width: 31.w,
@ -696,12 +702,28 @@ class _MessagePageState extends State<MessagePage> with TickerProviderStateMixi
),
),
Expanded(
child: Wrap(
children: [
...giftList.asMap().entries.map((entry){
return GiftItem(item: entry.value, active: activeGift, index: entry.key, changeActive: changeActive);
}),
],
child: Swiper(
autoplay: false,
itemCount: 6,
loop: true,
pagination: const SwiperPagination(
alignment: Alignment.bottomCenter,
builder: TDSwiperDotsPagination(
color: Color.fromRGBO(144, 144, 144, 1),
activeColor: Color.fromRGBO(77, 77, 77, 1),
)),
itemBuilder: (BuildContext context, int index) {
return Align(
alignment: Alignment.topCenter,
child: Wrap(
children: [
...giftList.asMap().entries.map((entry){
return GiftItem(item: entry.value, active: activeGift, index: entry.key, changeActive: changeActive);
}),
],
),
);
},
),
),
Container(
@ -732,43 +754,114 @@ class _MessagePageState extends State<MessagePage> with TickerProviderStateMixi
),
],
) ,
Row(
children: [
TDStepper(
theme: TDStepperTheme.filled,
value: giftNum,
min: 1,
onChange: (e){
giftNum = e;
},
),
SizedBox(width: 18.w,),
Container(
width: 127.w,
height: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(60.w)),
gradient: LinearGradient(
begin: Alignment.centerLeft, //
end: Alignment.centerRight, // 90
colors: [
Color.fromRGBO(61, 138, 224, 1), //
Color.fromRGBO(131, 89, 255, 1), //
],
),
),
child: Center(
child: Text(
"赠送",
style: TextStyle(
fontSize: 26.w,
color: Colors.white
ValueListenableBuilder<int>(
valueListenable: giftNum,
builder: (context, num, _) {
return Row(
children: [
// TDStepper(
// theme: TDStepperTheme.filled,
// value: giftNum,
// min: 1,
// onChange: (e){
// giftNum = e;
// },
// ),
InkWell(
onTap: (){
if(giftNum.value <= 1) return;
giftNum.value -= 1;
setState(() {
});
},
child: Container(
width: 29.w,
height: 29.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(29.w)),
color: Color.fromRGBO(117, 98, 249, giftNum.value <= 1 ? 0 : 1),
border: Border.all(width: 1, color: Color.fromRGBO(117, 98, 249, 1))
),
child: Center(
child: Text(
"-",
style: TextStyle(
fontSize: 26.w,
color: giftNum.value <= 1 ? Color.fromRGBO(117, 98, 249, 1) : Colors.white,
height: 1
),
),
),
),
),
),
),
)
],
)
SizedBox(
width: 46.w,
child: Center(
child: Text(
"$num",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
),
),
InkWell(
onTap: (){
giftNum.value += 1;
setState(() {
});
},
child: Container(
width: 29.w,
height: 29.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(29.w)),
color: Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"+",
style: TextStyle(
fontSize: 26.w,
color: Colors.white,
height: 1
),
),
),
),
),
SizedBox(width: 18.w,),
Container(
width: 127.w,
height: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(60.w)),
gradient: LinearGradient(
begin: Alignment.centerLeft, //
end: Alignment.centerRight, // 90
colors: [
Color.fromRGBO(61, 138, 224, 1), //
Color.fromRGBO(131, 89, 255, 1), //
],
),
),
child: Center(
child: Text(
"赠送",
style: TextStyle(
fontSize: 26.w,
color: Colors.white
),
),
),
)
],
);
}),
],
),
)

194
lib/pages/message_setting_page.dart

@ -0,0 +1,194 @@
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class MessageSettingPage extends StatefulWidget {
const MessageSettingPage({super.key});
@override
State<MessageSettingPage> createState() => _MessageSettingPageState();
}
class _MessageSettingPageState extends State<MessageSettingPage> {
bool blockUser = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PageAppbar(title: "聊天设置",),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(
top: 26.w,
right: 41.w,
left: 30.w
),
child: Column(
children: [
Container(
padding: EdgeInsets.only(
bottom: 30.w
),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: const Color.fromRGBO(245, 245, 245, 1)
)
)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(120.w)),
child: Image.asset(
"assets/user_avatar.png",
width: 120.w,
height: 120.w,
),
),
SizedBox(width: 32.w,),
Text(
"林园园",
style: TextStyle(
fontSize: 35.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
)
],
),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
),
),
Container(
height: 84.w,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: const Color.fromRGBO(245, 245, 245, 1)
)
)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"设置备注名",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
),
),
Container(
height: 84.w,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: const Color.fromRGBO(245, 245, 245, 1)
)
)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"加入黑名单",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
TDSwitch(
isOn: blockUser,
trackOnColor: const Color.fromRGBO(117, 98, 249, 1),
onChanged: (bool e){
print(e);
blockUser = e;
setState(() {
});
return e;
},
),
],
),
),
Container(
height: 84.w,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: const Color.fromRGBO(245, 245, 245, 1)
)
)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"举报",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
Icon(
Icons.keyboard_arrow_right,
size: 26.w,
color: const Color.fromRGBO(191, 191, 191, 1)
)
],
),
),
SizedBox(height: 30.w ,),
Container(
width: 650.w,
height: 90.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(90.w)),
color: Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"关注",
style: TextStyle(
fontSize: 36.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
),
),
)
],
),
),
),
);
}
}

113
lib/pages/my_page.dart

@ -20,10 +20,10 @@ class _MyPageState extends State<MyPage> {
];
List<Map> blockList = [
{"icon": "assets/rose.png", "title": "我的玫瑰", "subTitle": "新人限时福利"},
{"icon": "assets/wallet.png", "title": "我的钱包", "subTitle": "提现无门槛"},
{"icon": "assets/shop.png", "title": "商城中心", "subTitle": "不定期更新商品"},
{"icon": "assets/cert.png", "title": "认证中心 ", "subTitle": "未认证"},
{"icon": "assets/rose.png", "title": "我的玫瑰", "subTitle": "新人限时福利", "path": RouteNames.rose},
{"icon": "assets/wallet.png", "title": "我的钱包", "subTitle": "提现无门槛", "path": ""},
{"icon": "assets/shop.png", "title": "商城中心", "subTitle": "不定期更新商品", "path": ""},
{"icon": "assets/cert.png", "title": "认证中心", "subTitle": "未认证", "path": ""},
];
List<Map> settingList = [
@ -178,7 +178,7 @@ class _MyPageState extends State<MyPage> {
runSpacing: 17.w,
children: [
...blockList.map((e){
return BlockItem(item: e);
return BlockItem(item: e, showWaring: e["title"] == "认证中心", path: e["path"],);
}),
],
),
@ -227,7 +227,9 @@ class _InfoItemState extends State<InfoItem> {
class BlockItem extends StatefulWidget {
final Map item;
const BlockItem({super.key, required this.item});
final bool showWaring;
final String path;
const BlockItem({super.key, required this.item, this.showWaring = false, required this.path});
@override
State<BlockItem> createState() => _BlockItemState();
@ -236,55 +238,60 @@ class BlockItem extends StatefulWidget {
class _BlockItemState extends State<BlockItem> {
@override
Widget build(BuildContext context) {
return Container(
width: 340.w,
height: 77.w,
padding: EdgeInsets.symmetric(horizontal: 15.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
color: Colors.white
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Image.asset(
widget.item["icon"],
width: 42.w,
height: 42.w,
),
SizedBox(width: 5.w,),
Text(
widget.item["title"],
style: TextStyle(
fontSize: 25.w,
color: Colors.black,
),
)
],
),
Row(
children: [
Container(
width: 10.w,
height: 10.w,
margin: EdgeInsets.only(right: 9.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10.w)),
color: const Color.fromRGBO(255, 87, 51, 1)
return InkWell(
onTap: (){
context.pushNamed(widget.path);
},
child: Container(
width: 340.w,
height: 77.w,
padding: EdgeInsets.symmetric(horizontal: 15.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
color: Colors.white
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Image.asset(
widget.item["icon"],
width: 42.w,
height: 42.w,
),
),
Text(
widget.item["subTitle"],
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(166, 166, 166, 1)
SizedBox(width: 5.w,),
Text(
widget.item["title"],
style: TextStyle(
fontSize: 25.w,
color: Colors.black,
),
)
],
),
Row(
children: [
if(widget.showWaring) Container(
width: 10.w,
height: 10.w,
margin: EdgeInsets.only(right: 9.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10.w)),
color: const Color.fromRGBO(255, 87, 51, 1)
),
),
)
],
)
],
Text(
widget.item["subTitle"],
style: TextStyle(
fontSize: 18.w,
color: const Color.fromRGBO(166, 166, 166, 1)
),
)
],
)
],
),
),
);
}

162
lib/pages/pay_history_page.dart

@ -0,0 +1,162 @@
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class PayHistoryPage extends StatefulWidget {
const PayHistoryPage({super.key});
@override
State<PayHistoryPage> createState() => _PayHistoryPageState();
}
class _PayHistoryPageState extends State<PayHistoryPage> {
List<String> friendNavList = ["赠送记录", "收支详情", "聊天券记录"];
int friendNavActive = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PageAppbar(title: "交易记录"),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.symmetric(
vertical: 12.w,
horizontal: 30.w
),
child: Column(
children: [
Row(
children: [
...friendNavList.asMap().entries.map((entry){
return Container(
margin: EdgeInsets.only(right: 50.w),
child: InkWell(
onTap: (){
friendNavActive = entry.key;
setState(() {
});
},
child: Container(
padding: entry.key == friendNavActive ? EdgeInsets.symmetric(vertical: 5.w, horizontal: 26.w) : EdgeInsets.zero,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(43.w)),
color: entry.key == friendNavActive ? const Color.fromRGBO(117, 98, 249, 1) : Colors.transparent
),
child: Text(
entry.value,
style: TextStyle(
fontSize: 24.w,
color: entry.key == friendNavActive ? Colors.white : const Color.fromRGBO(51, 51, 51, .7),
fontWeight: entry.key == friendNavActive ? FontWeight.w700 : FontWeight.w500
),
),
),
),
);
}),
],
),
SizedBox(height: 8.w,),
SendItem(),
SendItem(),
SendItem(),
SendItem(),
SendItem(),
SizedBox(height: 13.w,),
Text(
"没有更多了",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
)
],
),
),
),
);
}
}
class SendItem extends StatefulWidget {
const SendItem({super.key});
@override
State<SendItem> createState() => _SendItemState();
}
class _SendItemState extends State<SendItem> {
@override
Widget build(BuildContext context) {
return Container(
height: 140.w,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1,
color: const Color.fromRGBO(219, 219, 219, 1)
)
)
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Container(
width: 81.w,
height: 81.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(81.w)),
color: const Color.fromRGBO(237, 237, 237, 1)
),
child: Center(
child: Image.asset(
"assets/rose_gift.png",
width: 55.w,
height: 55.w,
),
),
),
SizedBox(width: 25.w,),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"视频详情直播间送礼物",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
Text(
"2025-11-03 17:55:55",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
)
],
)
],
),
Text(
"-1支",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(227, 84, 84, 1)
),
)
],
),
);
}
}

443
lib/pages/report_page.dart

@ -0,0 +1,443 @@
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:roundcheckbox/roundcheckbox.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class ReportPage extends StatefulWidget {
const ReportPage({super.key});
@override
State<ReportPage> createState() => _ReportPageState();
}
class _ReportPageState extends State<ReportPage> {
int checked = 0;
String message = '';
bool blockUser = false;
final TextEditingController _messageController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PageAppbar(title: "举报中心",),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(
top: 12.w,
right: 20.w,
left: 40.w
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"请选择举报的原因",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
],
),
SizedBox(height: 19.w ,),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"资料作假",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 1;
setState(() {
});
},
isChecked: checked == 1,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"色情低俗",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 2;
setState(() {
});
},
isChecked: checked == 2,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"涉政/涉独",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 3;
setState(() {
});
},
isChecked: checked == 3,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"违法违禁",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 4;
setState(() {
});
},
isChecked: checked == 4,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"未成年相关",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 5;
setState(() {
});
},
isChecked: checked == 5,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"欺诈/广告/引导第三方交易",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 6;
setState(() {
});
},
isChecked: checked == 6,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"恶意骚扰/侮辱谩骂",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 7;
setState(() {
});
},
isChecked: checked == 7,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(
height: 65.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"其他",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
RoundCheckBox(
onTap: (bool? value){
checked = 8;
setState(() {
});
},
isChecked: checked == 8,
size: ScreenUtil().setWidth(36),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(15),
),
),
],
),
),
SizedBox(height: 58.w ,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"图片证据(选填)",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
],
),
SizedBox(height: 26.w ,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: 160.w,
height: 160.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(16.w)),
border: Border.all(width: 1, color: const Color.fromRGBO(224, 224, 224, 1))
),
child: Center(
child: Icon(
Icons.add,
size: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
),
)
],
),
SizedBox(height: 30.w ,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"投诉内容(选填)",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
],
),
Container(
padding: EdgeInsets.all(35.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(16.w)),
border: Border.all(width: 1, color: const Color.fromRGBO(224, 224, 224, 1))
),
child: TextField(
controller: _messageController,
minLines: 3, //
maxLines: 3, //
style: TextStyle(
fontSize: ScreenUtil().setWidth(26),
height: 1
),
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
vertical: 0,
horizontal: 0
),
hintText: "请告诉您举报的具体原因,以便更快处理",
border: const OutlineInputBorder(
borderSide: BorderSide.none, // //
),
// focusedBorder enabledBorder
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.all(Radius.circular(8.0)),
),
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.all(Radius.circular(8.0)),
),
),
onChanged: (value){
message = value;
},
),
),
SizedBox(height: 32.w ,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"同时加入黑名单",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
),
TDSwitch(
isOn: blockUser,
trackOnColor: const Color.fromRGBO(117, 98, 249, 1),
onChanged: (bool e){
print(e);
blockUser = e;
setState(() {
});
return e;
},
),
],
),
SizedBox(height: 107.w ,),
Container(
width: 650.w,
height: 90.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(90.w)),
color: Color.fromRGBO(117, 98, 249, checked != 0 ? 1 : .6)
),
child: Center(
child: Text(
"提交",
style: TextStyle(
fontSize: 36.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
),
),
)
],
),
),
),
);
}
}

395
lib/pages/rose_page.dart

@ -0,0 +1,395 @@
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:dating_touchme_app/router/route_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:roundcheckbox/roundcheckbox.dart';
class RosePage extends StatefulWidget {
const RosePage({super.key});
@override
State<RosePage> createState() => _RosePageState();
}
class _RosePageState extends State<RosePage> {
bool payChecked = true;
int activePay = 0;
List<Map> payList = [
{"num": 10, "price": 10, "hasTag": true},
{"num": 60, "price": 60, "hasTag": true},
{"num": 300, "price": 60, "hasTag": true},
{"num": 1080, "price": 1080, "hasTag": false},
{"num": 2880, "price": 2880, "hasTag": false},
{"num": 5000, "price": 5000, "hasTag": false},
{"num": 10000, "price": 10000, "hasTag": false},
{"num": 20000, "price": 20000, "hasTag": false},
{"num": 50000, "price": 50000, "hasTag": false},
];
changePayActive(int index){
activePay = index;
setState(() {
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PageAppbar(title: "玫瑰充值", right: Container(
margin: EdgeInsets.only(right: 28.w),
child: InkWell(
onTap: (){
context.pushNamed(RouteNames.payHistory);
},
child: Text(
"交易记录",
style: TextStyle(
fontSize: 26.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
),
),
),),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.symmetric(
vertical: 20.w,
horizontal: 25.w
),
child: Column(
children: [
Image.asset(
"assets/rose_banner.png",
width: 700.w,
height: 322.w,
),
SizedBox(height: 45.w,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"余额:",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500
),
),
Text(
"15",
style: TextStyle(
fontSize: 32.w,
color: const Color.fromRGBO(117, 98, 249, 1),
fontWeight: FontWeight.w700
),
),
SizedBox(width: 11.w,),
Image.asset(
"assets/rose_gift.png",
width: 26.w,
height: 26.w,
)
],
),
Wrap(
spacing: 9.w,
runSpacing: 14.w,
children: [
...payList.asMap().entries.map((entry){
return PayItem(item: entry.value, active: activePay, index: entry.key, changeActive: changePayActive);
}),
],
),
Container(
height: 1,
margin: EdgeInsets.only(
top: 20.w,
bottom: 30.w
),
color: const Color.fromRGBO(219, 219, 219, 1),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Image.asset(
"assets/ali_pay.png",
width: 35.w,
height: 35.w,
),
SizedBox(width: 12.w,),
Text(
"支付宝支付",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
)
],
),
RoundCheckBox(
onTap: (bool? value) {
setState(() {
payChecked = true;
});
},
isChecked: payChecked,
size: ScreenUtil().setWidth(30),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(14),
),
),
],
),
SizedBox(height: 20.w,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Image.asset(
"assets/wechat_pay.png",
width: 35.w,
height: 35.w,
),
SizedBox(width: 12.w,),
Text(
"支付宝支付",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
)
],
),
RoundCheckBox(
onTap: (bool? value) {
setState(() {
payChecked = false;
});
},
isChecked: !payChecked,
size: ScreenUtil().setWidth(30),
checkedColor: const Color.fromRGBO(117, 98, 249, 1),
checkedWidget: Icon(
Icons.check,
color: const Color.fromRGBO(255, 255, 255, 1),
size: ScreenUtil().setWidth(14),
),
),
],
),
SizedBox(height: 17.w,),
Row(
children: [
RichText(
text: TextSpan(
style: TextStyle(
fontSize: 22.w,
fontWeight: FontWeight.w500
),
children: const [
TextSpan(
text: "充值既代表同意",
style: TextStyle(
color: Color.fromRGBO(189, 189, 189, 1)
)
),
TextSpan(
text: "《动我充值协议》",
style: TextStyle(
color: Color.fromRGBO(71, 123, 255, 1)
)
),
TextSpan(
text: "和隐私政策",
style: TextStyle(
color: Color.fromRGBO(189, 189, 189, 1)
)
),
]
),
)
],
),
SizedBox(height: 100.w,),
Container(
width: 650.w,
height: 90.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(90.w)),
gradient: LinearGradient(
begin: Alignment.centerLeft, // 0%
end: Alignment.centerRight, // 100%
colors: [
Color.fromRGBO(131, 89, 255, 1), //
Color.fromRGBO(77, 127, 231, 1), //
Color.fromRGBO(61, 138, 224, 1), //
],
stops: [0.0, 0.7753, 1.0], // CSS 0%77.53%100%
),
),
child: Center(
child: Text(
"立即充值",
style: TextStyle(
fontSize: 36.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
),
),
)
],
),
),
),
);
}
}
class PayItem extends StatefulWidget {
final Map item;
final int active;
final int index;
final void Function(int) changeActive;
const PayItem({super.key, required this.item, required this.active, required this.index, required this.changeActive, });
@override
State<PayItem> createState() => _PayItemState();
}
class _PayItemState extends State<PayItem> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: (){
widget.changeActive(widget.index);
},
child: Stack(
children: [
Container(
width: 227.w,
height: 110.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
color: widget.active == widget.index ? const Color.fromRGBO(239, 19, 46, .05) : const Color.fromRGBO(247, 247, 247, 1),
border: widget.active == widget.index ? Border.all(width: 1, color: const Color.fromRGBO(239, 19, 46, 1)) : null
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: "${widget.item["num"]}",
style: TextStyle(
fontSize: 35.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w700
),
),
TextSpan(
text: "玫瑰",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(51, 51, 51, 1),
fontWeight: FontWeight.w500
),
)
]
),
),
Text(
"${widget.item["price"]}",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(144, 144, 144, 144),
fontWeight: FontWeight.w500
),
)
],
),
),
if(widget.item["hasTag"]) Positioned(
top: 0,
left: 0,
child: Container(
width: 107.w,
height: 23.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(18.w),
bottomRight: Radius.circular(18.w),
),
color: widget.active == widget.index ? null :const Color.fromRGBO(238, 24, 50, .1),
gradient: widget.active == widget.index ? LinearGradient(
begin: Alignment.centerLeft, // 0%
end: Alignment.centerRight, // 100%
colors: [
Color.fromRGBO(238, 24, 50, 1), // #EE1832
Color.fromRGBO(250, 101, 64, 1), // #FA6540
Color.fromRGBO(255, 131, 69, 1), // #FF8345
],
stops: [0.0, 0.7216, 1.0], // CSS
) : null,
),
child: Center(
child: Text(
"送新人大礼包",
style: TextStyle(
fontSize: 12.w,
color: widget.active == widget.index ? Colors.white : const Color.fromRGBO(237, 23, 50, 1),
fontWeight: FontWeight.w500
),
),
),
),
),
if(widget.active == widget.index) Positioned(
right: 0,
bottom: 0,
child: Container(
width: 35.w,
height: 26.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(18.w),
bottomRight: Radius.circular(18.w),
),
color: const Color.fromRGBO(239, 19, 46, 1)
),
child: Center(
child: Image.asset(
"assets/check.png",
width: 13.w,
height: 9.w,
),
),
),
)
],
),
);
}
}

4
lib/pages/signature_page.dart

@ -39,13 +39,13 @@ class _SignaturePageState extends State<SignaturePage> {
style: TextStyle(
fontSize: ScreenUtil().setWidth(26),
height: 1
),
),
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
vertical: 0,
horizontal: 0
),
hintText: "请输入邀请码",
hintText: "请输入交友心声",
border: const OutlineInputBorder(
borderSide: BorderSide.none, // //

239
lib/pages/tag_setting_page.dart

@ -0,0 +1,239 @@
import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class TagSettingPage extends StatefulWidget {
const TagSettingPage({super.key});
@override
State<TagSettingPage> createState() => _TagSettingPageState();
}
class _TagSettingPageState extends State<TagSettingPage> {
int active = 0;
List<String> tagNav = [
"兴趣爱好", "个人特质", "身份", "经历", "选择状态"
];
List<String> tagList = [
"K歌", "王者荣耀", "旅行", "艺术生", "电影",
"喜欢画画", "铲屎官", "足球", "音乐", "吃鸡",
];
List<String> selectTagList = [
"K歌", "吃鸡",
];
changeNav(int i){
print(i);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PageAppbar(title: "个性标签"),
body: Column(
children: [
Container(
height: 54.w,
color: Colors.white,
child: Center(
child: Text(
"选辉个人标签吸引共同爱好玩伴",
style: TextStyle(
fontSize: 22.w,
color: const Color.fromRGBO(144, 144, 144, 1),
),
),
),
),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
Container(
width: 750.w,
height: 400.w,
color: const Color.fromRGBO(250, 250, 250, 1),
padding: EdgeInsets.symmetric(
vertical: 46.w,
horizontal: 34.w
),
child: SingleChildScrollView(
child: Wrap(
spacing: 30.w,
runSpacing: 15.w,
children: [
...selectTagList.map((e){
return SelectTag(label: e);
}),
],
),
),
),
SizedBox(height: 25.w,),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
...tagNav.asMap().entries.map((entry){
return InkWell(
onTap: (){
active = entry.key;
changeNav(active);
setState(() {
});
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(27)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
entry.value,
style: TextStyle(
fontSize: 27.w,
color: active == entry.key ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500
),
),
SizedBox(height: ScreenUtil().setWidth(9),),
if(active == entry.key) Image.asset(
"assets/home_top_active.png",
width: ScreenUtil().setWidth(25),
)
],
),
),
);
}),
],
),
SizedBox(height: 37.w,),
Container(
padding: EdgeInsets.symmetric(horizontal: 29.w),
child: Wrap(
spacing: 24.w,
runSpacing: 15.w,
children: [
...tagList.map((e){
return TagItem(label: e);
}),
],
),
),
SizedBox(height: 300.w,),
Container(
width: 650.w,
height: 90.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(90.w)),
color: const Color.fromRGBO(117, 98, 249, 1)
),
child: Center(
child: Text(
"保存(2/10)",
style: TextStyle(
fontSize: 36.w,
color: Colors.white,
fontWeight: FontWeight.w500
),
),
),
)
],
),
),
)
],
),
);
}
}
class TagItem extends StatefulWidget {
final String label;
const TagItem({super.key, required this.label});
@override
State<TagItem> createState() => _TagItemState();
}
class _TagItemState extends State<TagItem> {
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(
vertical: 5.w,
horizontal: 23.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(50.w)),
color: const Color.fromRGBO(242, 242, 242, 1)
),
child: Text(
widget.label,
style: TextStyle(
fontSize: 28.w,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
);
}
}
class SelectTag extends StatefulWidget {
final String label;
const SelectTag({super.key, required this.label});
@override
State<SelectTag> createState() => _SelectTagState();
}
class _SelectTagState extends State<SelectTag> {
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(
vertical: 5.w,
horizontal: 29.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(50.w)),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color.fromRGBO(0, 0, 0, 0.15), // rgba(0,0,0,0.15)
offset: const Offset(0, 0), // X=0, Y=0
blurRadius: 5.w, // 5px
spreadRadius: 0, // 0 CSS
),
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
widget.label,
style: TextStyle(
fontSize: 28.w,
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(width: 14.w,),
Icon(
Icons.close,
size: 14.w,
color: const Color.fromRGBO(207, 207, 207, 1),
)
],
),
);
}
}

2
lib/pages/user_info_page.dart

@ -1,3 +1,4 @@
import 'package:dating_touchme_app/router/route_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
@ -338,6 +339,7 @@ class _UserInfoPageState extends State<UserInfoPage> {
onSelected: (v) {
if (v == 'report') {
print("举报");
context.pushNamed(RouteNames.report);
}
if (v == 'block') {
print("拉黑");

30
lib/router/app_router.dart

@ -4,9 +4,14 @@ import 'package:dating_touchme_app/pages/home_page.dart';
import 'package:dating_touchme_app/pages/live_room_page.dart';
import 'package:dating_touchme_app/pages/login_page.dart';
import 'package:dating_touchme_app/pages/message_page.dart';
import 'package:dating_touchme_app/pages/message_setting_page.dart';
import 'package:dating_touchme_app/pages/notify_page.dart';
import 'package:dating_touchme_app/pages/open_webview.dart';
import 'package:dating_touchme_app/pages/pay_history_page.dart';
import 'package:dating_touchme_app/pages/report_page.dart';
import 'package:dating_touchme_app/pages/rose_page.dart';
import 'package:dating_touchme_app/pages/signature_page.dart';
import 'package:dating_touchme_app/pages/tag_setting_page.dart';
import 'package:dating_touchme_app/pages/test_page.dart';
import 'package:dating_touchme_app/pages/user_info_page.dart';
import 'package:dating_touchme_app/router/route_paths.dart';
@ -94,6 +99,31 @@ class AppRouter {
path: RoutePaths.signature,
builder: (context, state) => const SignaturePage(),
),
GoRoute(
name: RouteNames.report,
path: RoutePaths.report,
builder: (context, state) => const ReportPage(),
),
GoRoute(
name: RouteNames.messageSetting,
path: RoutePaths.messageSetting,
builder: (context, state) => const MessageSettingPage(),
),
GoRoute(
name: RouteNames.tagSetting,
path: RoutePaths.tagSetting,
builder: (context, state) => const TagSettingPage(),
),
GoRoute(
name: RouteNames.rose,
path: RoutePaths.rose,
builder: (context, state) => const RosePage(),
),
GoRoute(
name: RouteNames.payHistory,
path: RoutePaths.payHistory,
builder: (context, state) => const PayHistoryPage(),
),
GoRoute(
name: RouteNames.test,
path: RoutePaths.test,

10
lib/router/route_paths.dart

@ -10,6 +10,11 @@ class RouteNames {
static const message = 'message';
static const editInfo = 'editInfo';
static const signature = 'signature';
static const report = 'report';
static const messageSetting = 'messageSetting';
static const tagSetting = 'tagSetting';
static const rose = 'rose';
static const payHistory = 'payHistory';
static const test = 'test';
}
@ -24,5 +29,10 @@ class RoutePaths {
static const message = '/message';
static const editInfo = '/editInfo';
static const signature = '/signature';
static const report = '/report';
static const messageSetting = '/messageSetting';
static const tagSetting = '/tagSetting';
static const rose = '/rose';
static const payHistory = '/payHistory';
static const test = '/test';
}
Loading…
Cancel
Save