diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e186b49..3dc7d2b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ + + + @@ -9,6 +12,12 @@ + + + + + + { int menuActive = 1; + + List 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 tagList = [ + "北京", "160cm", "想要甜甜的恋爱", "本科", "朋友圈摄影师", "英雄联盟", "流放之路", + "CF", "DNA", "堡垒之夜", "SCP" + ]; + @override Widget build(BuildContext context) { return Scaffold( @@ -43,7 +57,7 @@ class _EditInfoPageState extends State { ), 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 { ), ], ), - 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 { } } + +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) + ), + ), + ); + } +} diff --git a/lib/pages/live_room_page.dart b/lib/pages/live_room_page.dart index c75ef33..d80385e 100644 --- a/lib/pages/live_room_page.dart +++ b/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 { {"icon": "assets/gift5.png", "title": "崇拜衣柜", "price": 30}, ]; - int giftNum = 1; + final giftNum = ValueNotifier(1); final activePay = ValueNotifier(null); List payList = [ @@ -1195,12 +1196,28 @@ class _LiveRoomPageState extends State { ), ), 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 { ), ], ) , - 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( + 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 + ), + ), + ), + ) + ], + ); + }), + ], ), ) diff --git a/lib/pages/message_page.dart b/lib/pages/message_page.dart index b0a58e0..c0e5f4c 100644 --- a/lib/pages/message_page.dart +++ b/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 with TickerProviderStateMixi {"icon": "assets/gift5.png", "title": "崇拜衣柜", "price": 30}, ]; - int giftNum = 1; + final giftNum = ValueNotifier(1); @@ -170,6 +173,9 @@ class _MessagePageState extends State 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 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 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( + 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 + ), + ), + ), + ) + ], + ); + }), ], ), ) diff --git a/lib/pages/message_setting_page.dart b/lib/pages/message_setting_page.dart new file mode 100644 index 0000000..4a06e1f --- /dev/null +++ b/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 createState() => _MessageSettingPageState(); +} + +class _MessageSettingPageState extends State { + + + 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 + ), + ), + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/pages/my_page.dart b/lib/pages/my_page.dart index 2fa0866..6476bf4 100644 --- a/lib/pages/my_page.dart +++ b/lib/pages/my_page.dart @@ -20,10 +20,10 @@ class _MyPageState extends State { ]; List 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 settingList = [ @@ -178,7 +178,7 @@ class _MyPageState extends State { 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 { 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 createState() => _BlockItemState(); @@ -236,55 +238,60 @@ class BlockItem extends StatefulWidget { class _BlockItemState extends State { @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) + ), + ) + ], + ) + ], + ), ), ); } diff --git a/lib/pages/pay_history_page.dart b/lib/pages/pay_history_page.dart new file mode 100644 index 0000000..9e3823c --- /dev/null +++ b/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 createState() => _PayHistoryPageState(); +} + +class _PayHistoryPageState extends State { + + + + List 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 createState() => _SendItemState(); +} + +class _SendItemState extends State { + @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) + ), + ) + ], + ), + ); + } +} diff --git a/lib/pages/report_page.dart b/lib/pages/report_page.dart new file mode 100644 index 0000000..dd25cad --- /dev/null +++ b/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 createState() => _ReportPageState(); +} + +class _ReportPageState extends State { + + 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 + ), + ), + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/pages/rose_page.dart b/lib/pages/rose_page.dart new file mode 100644 index 0000000..179fe51 --- /dev/null +++ b/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 createState() => _RosePageState(); +} + +class _RosePageState extends State { + + + + + bool payChecked = true; + + int activePay = 0; + List 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 createState() => _PayItemState(); +} + +class _PayItemState extends State { + @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, + ), + ), + ), + ) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/pages/signature_page.dart b/lib/pages/signature_page.dart index 2ccf5f1..d4fa718 100644 --- a/lib/pages/signature_page.dart +++ b/lib/pages/signature_page.dart @@ -39,13 +39,13 @@ class _SignaturePageState extends State { 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, // 这将移除边框 // 可选:设置圆角 diff --git a/lib/pages/tag_setting_page.dart b/lib/pages/tag_setting_page.dart new file mode 100644 index 0000000..709b939 --- /dev/null +++ b/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 createState() => _TagSettingPageState(); +} + +class _TagSettingPageState extends State { + + int active = 0; + + List tagNav = [ + "兴趣爱好", "个人特质", "身份", "经历", "选择状态" + ]; + + List tagList = [ + "K歌", "王者荣耀", "旅行", "艺术生", "电影", + "喜欢画画", "铲屎官", "足球", "音乐", "吃鸡", + ]; + + List 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 createState() => _TagItemState(); +} + +class _TagItemState extends State { + @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 createState() => _SelectTagState(); +} + +class _SelectTagState extends State { + @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), + ) + ], + ), + ); + } +} diff --git a/lib/pages/user_info_page.dart b/lib/pages/user_info_page.dart index c9b2078..3fab8c0 100644 --- a/lib/pages/user_info_page.dart +++ b/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 { onSelected: (v) { if (v == 'report') { print("举报"); + context.pushNamed(RouteNames.report); } if (v == 'block') { print("拉黑"); diff --git a/lib/router/app_router.dart b/lib/router/app_router.dart index 1435a08..c8f2ca9 100644 --- a/lib/router/app_router.dart +++ b/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, diff --git a/lib/router/route_paths.dart b/lib/router/route_paths.dart index 437f628..513611b 100644 --- a/lib/router/route_paths.dart +++ b/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'; }