From 92c0cc12ed78ce50fcb4e32afb85104d7098b10e Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Fri, 7 Nov 2025 13:44:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E7=89=88=E8=81=8A=E5=A4=A9=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 10 + assets/camera_icon.png | Bin 0 -> 2388 bytes assets/chat_emoji.png | Bin 0 -> 1809 bytes assets/chat_gift.png | Bin 0 -> 7764 bytes assets/chat_more.png | Bin 0 -> 1194 bytes assets/chat_video.png | Bin 0 -> 937 bytes assets/chat_voice.png | Bin 0 -> 1930 bytes assets/img_icon.png | Bin 0 -> 2315 bytes assets/menu_icon.png | Bin 0 -> 415 bytes assets/mic_line.png | Bin 0 -> 2216 bytes assets/no_chat_bg.png | Bin 0 -> 86590 bytes assets/notify_icon.png | Bin 0 -> 990 bytes devtools_options.yaml | 3 + lib/components/chat_message.dart | 63 + lib/components/my_message.dart | 64 + lib/components/page_appbar.dart | 4 +- lib/pages/chat_page.dart | 395 +++++-- lib/pages/message_page.dart | 1049 +++++++++++++++++ lib/pages/notify_page.dart | 50 + lib/router/app_router.dart | 15 + lib/router/route_paths.dart | 4 + lib/utils/utils.dart | 66 +- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + pubspec.lock | 40 + pubspec.yaml | 2 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 29 files changed, 1642 insertions(+), 136 deletions(-) create mode 100644 assets/camera_icon.png create mode 100644 assets/chat_emoji.png create mode 100644 assets/chat_gift.png create mode 100644 assets/chat_more.png create mode 100644 assets/chat_video.png create mode 100644 assets/chat_voice.png create mode 100644 assets/img_icon.png create mode 100644 assets/menu_icon.png create mode 100644 assets/mic_line.png create mode 100644 assets/no_chat_bg.png create mode 100644 assets/notify_icon.png create mode 100644 devtools_options.yaml create mode 100644 lib/components/chat_message.dart create mode 100644 lib/components/my_message.dart create mode 100644 lib/pages/message_page.dart create mode 100644 lib/pages/notify_page.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a9a1303..e186b49 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,14 @@ + + + + + + + + + + r004>z1^@s6b%)Yq00001b5ch_0Itp) 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 IM6N<$g1D(QU;qFB literal 0 HcmV?d00001 diff --git a/assets/chat_video.png b/assets/chat_video.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff78f3c24f2c2963e02a59b0c70a78a1a4fdb81 GIT binary patch literal 937 zcmeAS@N?(olHy`uVBq!ia0vp^Q9$g%!3HE5OO#%MsNx`ZCx&(BWI!C2VkgfK4j`!E zNaP(P9IhHq~9zGd^#sW<67Vckvs~Nis{-JAdaDx4q-u$$G1O zmfp)ILy0L&ztW5*3v77cu6(jb(22!0@Wrlm^92K$8~QAt%}(w(krMeWZLO&co8g!A zdC%QlYzpU`kTvY6h>Q9Vx3FBPNc!=d>d34Q|6BCBoP;l?YBt}Wb99e&_Wv6@PcSfa z$NulVU@iVrc-QfXRJ5CG!u__j zWA>LPX4j&eU6$|r|JlZV+x}|(YZDK@R@<1QkdtGUQnGN$qIGZ2`g+XVqxk4_|4R0J z0cKe~^W$%Jtb6@@O?E+kg0ZL@kMYzsdy`p`w+OHc&Ye?yqkOYK;CU&lu0zfH?X|GGrYS$N}Y!T0_myL3)}cBtIGTD?JW(&WU*Y3cv(+}g7J_s{(uZ)T=) zy>o7!nY?DL(ouE`=4OfRqNz$)92(l9haLG zdUV4PZ$ERV=f(DCBH9k#j01fYK!xDPx#1am@3R0s$N2z&@+hyVZwG)Y83RCt{2T|bZHG!%a?Tm#|*Ff+}HjyBE-ZNqsb zNj{cUN&Pt+wq@d5kKjq z+c=3mzr4SW{erLnR8_^*|GTbx0sw%Bd~k~TzW@M`Qi|dAMN#Yzhr_*Na{=e-xT-2H zrM&F_BNeex2@O&b3L@0gR%Rhm z2cL0E~gWMqiLEe^@>;r&k1iUC@CE~sC$G`wsUDYx-AHgsrvnI zH}%Dbf7}sD4PYs%J_aQ@vERB96$*g+B0EM-bstOPCls(3-zPmy5|_dt>2 zqWU@1-V&2SLD)~@MJbVjl$;TaH4e>_6Z-h^<4Y62IXr_rGMC64jWQsYv^!DxB-vHoi0Qk5+ z^eF)R$QXO>doNpvN2#N4UsI4=Ld&xJ3K73FG=IlAf23<59w?78utX@pFu+*Tb%^*m z(frZv?QNB^{}iB7&>S}OwWa+Z-N9T=BsL02>=nDN`<-a6o2L2G^OhoDI8i_)L&+ud z)vH&30KoT}rZ?0>Dd`bNihoCu0Jbe+iHci%UHL=%p@{RQI-x`(76l1r_z@ z7{D0RBDH|*Nld)X8;g?As;W3O0b-l{pd>pcD91+;N-o<=0g4bu>EybD3GA-6pTprG z3fqKfW^luC>*8MO;m5R}#B7%Uu&8`46&m!n)g5=)D@2S{1PsX;ce|(oNR{9@2BV;J zkkrCg1shIXH;zok3vQiP>dpzvSfX!8qoxwaecdC}vfgqLQc6vL z0HjfMSLp=M1oqU^U6PdQkUPZFaiz_aC@GzL+l`5^6#D>tr4zugldf&sz0X#X+!z-P zNU`O|RwJNk8g0U0tT|%yq;q6Yx!@8-m>!^Ua>SOcEZv@lAS8;gR>dLmWPr%I@)BTE zb(OQ5V4bnI%=XOgq+-HGrpwHiwdROrn{#j_uBCu6wxdcYNh!B3<&&JM;R60Vwa;c-eTW1IPh+!}49-=oe@cPv*-HiwF{P+=Omfv+?ZhhO z%PDF-L}2}Tq5EhGz-ifa0PROuIQS!a72c?XD*XRpfJ9g#u@Cao6=N)f*epf1vk=Bn~kfp<^h5hsQJ?T&OncBP?^`U(oPwN(FNu QzyJUM07*qoM6N<$f{5>(F8}}l literal 0 HcmV?d00001 diff --git a/assets/img_icon.png b/assets/img_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a54950917b901ce15c5d2b156c8acdc4b0136b7f GIT binary patch literal 2315 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 HDWM4fbnLAP literal 0 HcmV?d00001 diff --git a/assets/mic_line.png b/assets/mic_line.png new file mode 100644 index 0000000000000000000000000000000000000000..778156a7361a551317d1b4d60bf74401e65a0532 GIT binary patch literal 2216 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�&)PH1-n;9lR^k0`7y8k`zTV! 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 HJBI%c%03?g literal 0 HcmV?d00001 diff --git a/assets/notify_icon.png b/assets/notify_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c08d9066e5b8a661efb217c6db1b622e7bcf1ce GIT binary patch literal 990 zcmV<410np0P)Px#1am@3R0s$N2z&@+hyVZsh)G02RCt{2o6CWlFc5}kNSXjHTLb34awpkJj4MgD z63chv8a5Z`!pb4A(PE7rpur~a-3(@=Uo#Ry8X+)K6vY7%s}YaNx~})J>!X95#&^5j z2>`?d6RZu8a2YPkQouCf5aD?%Y~nAMi{!E$3pVip0EoB;06Fn_Hdy<7PuB&4SVH7% zER|Wp-h|#29u?y3;)|j<001DO=q?HJ&)VRKh)3>5VG*wht|FL|Tn!Ob{Di5j7l^oz z*$7d@bBi7jEfOY)FUwLWrA|{TF_OuRFj{=5x0O;A06>x?XMnFGygu?Pr4A4ePQIQBccWuGb^k=k*XA7R2#|m1S8)-E)oN zP1Af({onSS(eq_l3M$;WzOno1F9jl2wg{lY+va_v=hHO(2>>q!LvOATbS&CC{KZsu zSH3j@LcJfdbj{}Vp3CJT>$=|Cmb`5d5c=A^6Ho25Fb#4>`bMC-f@_NF`+slGKVp%w z^Q5udQ16@meUoCR+MLgA#&#-Ss3}j-8%|&?Lf-qgAoHcZ=k9eb@x$zCADd15TG_;} zl}-Fw*~G7vP5fHf#IKc2{8~YP*>h)~fxjD~5zf9X5~WmymV~4Ko;CM*nQ)(7dsYzf z_?e0}=Ioo!?RI;m@_5GV@=~eieI|E!4gb+Ef<`@NGBzJ>$Xxk<-igOP*wR6>EE9R2 z|F$JG6-9B#vaF&KoMR_MML%8TF=voUDXE8U*JT9EoX*a2v@G`Afh)n8?NDK?2H?!> zj@svSY$@TsaHq7hA1Bog3JKq5=E~!r?I3YKk04G=$v%T>&ch3T069(UKPR1$KL7v# M07*qoM6N<$f+hLbd;kCd literal 0 HcmV?d00001 diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/components/chat_message.dart b/lib/components/chat_message.dart new file mode 100644 index 0000000..23baa7a --- /dev/null +++ b/lib/components/chat_message.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ChatMessage extends StatefulWidget { + final String avatar; + final String message; + const ChatMessage({super.key, required this.avatar, required this.message}); + + @override + State createState() => _ChatMessageState(); +} + +class _ChatMessageState extends State { + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only(bottom: 30.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + widget.avatar, + width: 62.w, + height: 62.w, + ), + SizedBox(width: 15.w,), + Flexible( + fit: FlexFit.loose, + child:Container( + margin: EdgeInsets.only(top: 10.w), + padding: EdgeInsets.only( + top: 31.w, + left: 46.w, + bottom: 31.w, + right: 39.w + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(18.w), + bottomRight: Radius.circular(18.w), + bottomLeft: Radius.circular(18.w), + ), + color: Colors.white + ), + child: Text( + widget.message, + style: TextStyle( + fontSize: 31.w, + color: const Color.fromRGBO(51, 51, 51, 1), + ), + ), + ) + ), + SizedBox(width: 15.w,), + SizedBox( + width: 62.w, + height: 62.w, + ) + ], + ), + ); + } +} diff --git a/lib/components/my_message.dart b/lib/components/my_message.dart new file mode 100644 index 0000000..6d6c9fd --- /dev/null +++ b/lib/components/my_message.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class MyMessage extends StatefulWidget { + final String avatar; + final String message; + const MyMessage({super.key, required this.avatar, required this.message}); + + @override + State createState() => _MyMessageState(); +} + +class _MyMessageState extends State { + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only(bottom: 30.w), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + SizedBox( + width: 62.w, + height: 62.w, + ), + SizedBox(width: 15.w,), + Flexible( + fit: FlexFit.loose, + child:Container( + margin: EdgeInsets.only(top: 10.w), + padding: EdgeInsets.only( + top: 31.w, + left: 46.w, + bottom: 31.w, + right: 39.w + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(18.w), + bottomRight: Radius.circular(18.w), + bottomLeft: Radius.circular(18.w), + ), + color: const Color.fromRGBO(117, 98, 249, 1) + ), + child: Text( + widget.message, + style: TextStyle( + fontSize: 31.w, + color: Colors.white, + ), + ), + ) + ), + SizedBox(width: 15.w,), + Image.asset( + widget.avatar, + width: 62.w, + height: 62.w, + ), + ], + ), + ); + } +} diff --git a/lib/components/page_appbar.dart b/lib/components/page_appbar.dart index 7fb4f95..0461e10 100644 --- a/lib/components/page_appbar.dart +++ b/lib/components/page_appbar.dart @@ -7,7 +7,8 @@ class PageAppbar extends StatelessWidget implements PreferredSizeWidget { final Color? color; final String title; - const PageAppbar({super.key, required this.title, this.backgroundColor, this.color}); + final Widget? right; + const PageAppbar({super.key, required this.title, this.backgroundColor, this.color, this.right}); @override Widget build(BuildContext context) { @@ -16,6 +17,7 @@ class PageAppbar extends StatelessWidget implements PreferredSizeWidget { surfaceTintColor: backgroundColor ?? const Color.fromRGBO(255, 255, 255, 1), centerTitle: true, foregroundColor: color, + actions: right != null ? [right ?? Container()] : null, title: Text( title, style: TextStyle( diff --git a/lib/pages/chat_page.dart b/lib/pages/chat_page.dart index 9cbf7b4..421c6fd 100644 --- a/lib/pages/chat_page.dart +++ b/lib/pages/chat_page.dart @@ -1,6 +1,8 @@ import 'package:dating_touchme_app/components/home_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'; class ChatPage extends StatefulWidget { const ChatPage({super.key}); @@ -15,11 +17,11 @@ class _ChatPageState extends State { List topNav = ["聊天", "好友"]; List chatList = [ - {"avatar": "assets/system_notifi.png", "isOnline": false, "userName": "系统通知", "messageNum": 2, "lastMessage": "在干嘛"}, - {"avatar": "assets/user_avatar.png", "isOnline": true, "userName": "林园园", "messageNum": 2, "lastMessage": "在干嘛"}, - {"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李晖", "messageNum": 0, "lastMessage": "好的"}, - {"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李哲", "messageNum": 0, "lastMessage": "在干嘛"}, - {"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李夏", "messageNum": 0, "lastMessage": "在干嘛"}, + {"id": 0,"avatar": "assets/system_notifi.png", "isOnline": false, "userName": "系统通知", "messageNum": 2, "lastMessage": "在干嘛"}, + {"id": 1,"avatar": "assets/user_avatar.png", "isOnline": true, "userName": "林园园", "messageNum": 2, "lastMessage": "在干嘛"}, + {"id": 1,"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李晖", "messageNum": 0, "lastMessage": "好的"}, + {"id": 1,"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李哲", "messageNum": 0, "lastMessage": "在干嘛"}, + {"id": 1,"avatar": "assets/user_avatar.png", "isOnline": false, "userName": "李夏", "messageNum": 0, "lastMessage": "在干嘛"}, ]; List topList = [ @@ -37,8 +39,18 @@ class _ChatPageState extends State { {"isFriend": false}, ]; + int nowActive = 0; + + List friendNavList = ["我的关注", "好友", "粉丝"]; + + int friendNavActive = 0; + void changeNav(int active) { print("当前项: $active"); + nowActive = active; + setState(() { + + }); } @override @@ -71,35 +83,120 @@ class _ChatPageState extends State { ), ),), ), - Container( - width: 750.w, - padding: EdgeInsets.only( - top: 5.w, - bottom: 46.w + if(nowActive == 0) ... [ + Container( + width: 750.w, + padding: EdgeInsets.only( + top: 5.w, + bottom: 46.w + ), + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(width: 11.w,), + ...topList.map((e){ + return TopItem(item: e); + }), + ], + ), + ), ), - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, + Container( + padding: EdgeInsets.symmetric(horizontal: 31.w), + child: Column( + children: [ + ...chatList.map((e){ + return ChatItem(item: e); + }), + ], + ), + ) + ], + if(nowActive == 1) ...[ + Container( + padding: EdgeInsets.symmetric(horizontal: 25.w), + margin: EdgeInsets.only(bottom: 35.w), child: Row( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox(width: 11.w,), - ...topList.map((e){ - return TopItem(item: e); + ...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 + ), + ), + ), + ), + ); }), + ], ), ), - ), - Container( - padding: EdgeInsets.symmetric(horizontal: 31.w), - child: Column( + if(friendNavActive == 0) ...[ + FriendItem(), + FriendItem(), + FriendItem(), + FriendItem(), + ], + if(friendNavActive != 0) Column( children: [ - ...chatList.map((e){ - return ChatItem(item: e); - }), + SizedBox(height: 100.w,), + Image.asset( + "assets/no_chat_bg.png", + width: 182.w, + height: 182.w, + ), + SizedBox(height: 27..w,), + Text( + "你还没有关注任何人噢", + style: TextStyle( + fontSize: 25.w, + color: const Color.fromRGBO(144, 144, 144, 1), + fontWeight: FontWeight.w500 + ), + ), + SizedBox(height: 22..w,), + Container( + width: 302.w, + height: 65.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(65.w)), + color: const Color.fromRGBO(117, 98, 249, 1), + ), + child: Center( + child: Text( + "去聊聊", + style: TextStyle( + fontSize: 25.w, + color: Colors.white, + fontWeight: FontWeight.w500 + ), + ), + ), + ) ], - ), - ) + ) + ] ], ), ); @@ -118,93 +215,104 @@ class _ChatItemState extends State { @override Widget build(BuildContext context) { return Container( - padding: EdgeInsets.symmetric(vertical: 15.w), margin: EdgeInsets.only(bottom: 15.w), - child: Row( - children: [ - Stack( + child: InkWell( + onTap: (){ + if(widget.item["id"] == 0){ + context.pushNamed(RouteNames.notify); + } else { + context.pushNamed(RouteNames.message); + } + }, + child: Container( + padding: EdgeInsets.symmetric(vertical: 15.w), + child: Row( children: [ - ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(92.w)), - child: Image.asset( - widget.item["avatar"], - width: 92.w, - height: 92.w, - ), - ), - if(widget.item["isOnline"]) Positioned( - right: 0, - bottom: 0, - child: Container( - width: 22.w, - height: 22.w, - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(22.w)), - color: const Color.fromRGBO(43, 255, 132, 1) + Stack( + children: [ + ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(92.w)), + child: Image.asset( + widget.item["avatar"], + width: 92.w, + height: 92.w, + ), ), - ), - ), - ], - ), - SizedBox(width: 17.w,), - SizedBox( - width: 578.w, - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - widget.item["userName"], - style: TextStyle( - fontSize: 27.w, - color: const Color.fromRGBO(51, 51, 51, 1), - fontWeight: FontWeight.w500 + if(widget.item["isOnline"]) Positioned( + right: 0, + bottom: 0, + child: Container( + width: 22.w, + height: 22.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(22.w)), + color: const Color.fromRGBO(43, 255, 132, 1) ), ), - Text( - "19.24", - style: TextStyle( - fontSize: 23.w, - color: const Color.fromRGBO(51, 51, 51, .6), - ), - ) - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + ), + ], + ), + SizedBox(width: 17.w,), + SizedBox( + width: 578.w, + child: Column( children: [ - Text( - widget.item["lastMessage"], - style: TextStyle( - fontSize: 23.w, - color: const Color.fromRGBO(51, 51, 51, .6), - ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + widget.item["userName"], + style: TextStyle( + fontSize: 27.w, + color: const Color.fromRGBO(51, 51, 51, 1), + fontWeight: FontWeight.w500 + ), + ), + Text( + "19.24", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, .6), + ), + ) + ], ), - if(widget.item["messageNum"] > 0) Container( - width: 38.w, - height: 38.w, - margin: EdgeInsets.only(right: 9.w), - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(38.w)), - color: const Color.fromRGBO(255, 87, 51, 1) - ), - child: Center( - child: Text( - "${widget.item["messageNum"]}", + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + widget.item["lastMessage"], style: TextStyle( fontSize: 23.w, - color: Colors.white + color: const Color.fromRGBO(51, 51, 51, .6), ), ), - ), + if(widget.item["messageNum"] > 0) Container( + width: 38.w, + height: 38.w, + margin: EdgeInsets.only(right: 9.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(38.w)), + color: const Color.fromRGBO(255, 87, 51, 1) + ), + child: Center( + child: Text( + "${widget.item["messageNum"]}", + style: TextStyle( + fontSize: 23.w, + color: Colors.white + ), + ), + ), + ) + ], ) ], - ) - ], - ), - ) - ], + ), + ) + ], + ), + ), ), ); } @@ -312,5 +420,94 @@ class _TopItemState extends State { } } +class FriendItem extends StatefulWidget { + const FriendItem({super.key}); + + @override + State createState() => _FriendItemState(); +} + +class _FriendItemState extends State { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 25.w), + margin: EdgeInsets.only(bottom: 30.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Image.asset( + "assets/user_avatar.png", + width: 90.w, + height: 90.w, + ), + SizedBox(width: 18.w,), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + "叫我大王", + style: TextStyle( + fontSize: 28.w, + color: const Color.fromRGBO(51, 51, 51, 1), + fontWeight: FontWeight.w500 + ), + ), + SizedBox(width: 14.w,), + Container( + width: 24.w, + height: 24.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(24.w)), + color: true ? const Color.fromRGBO(237, 245, 255, 1) : const Color.fromRGBO(255, 237, 255, 1) + ), + child: Center( + child: Image.asset( + true ? "assets/male.png" : "assets/female.png", + width: 14.w, + ), + ), + ) + ], + ), + Text( + "30岁·广州", + style: TextStyle( + fontSize: 22.w, + color: const Color.fromRGBO(144, 144, 144, 1), + fontWeight: FontWeight.w500 + ), + ) + ], + ) + ], + ), + Container( + width: 129.w, + height: 45.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(45.w)), + color: const Color.fromRGBO(224, 224, 224, 1) + ), + child: Center( + child: Text( + "已关注", + style: TextStyle( + fontSize: 22.w, + color: const Color.fromRGBO(144, 144, 144, 1), + fontWeight: FontWeight.w500 + ), + ), + ), + ) + ], + ), + ); + } +} diff --git a/lib/pages/message_page.dart b/lib/pages/message_page.dart new file mode 100644 index 0000000..b0a58e0 --- /dev/null +++ b/lib/pages/message_page.dart @@ -0,0 +1,1049 @@ +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/utils/utils.dart'; +import 'package:device_info_plus/device_info_plus.dart'; +import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +import 'package:flutter/foundation.dart' as foundation; +import 'package:permission_handler/permission_handler.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:image_picker/image_picker.dart'; + +class MessagePage extends StatefulWidget { + final int id; + const MessagePage({super.key, required this.id}); + + @override + State createState() => _MessagePageState(); +} + +class _MessagePageState extends State with TickerProviderStateMixin { + + + String message = ''; + final TextEditingController _messageController = TextEditingController(); + + + + final _controller = TextEditingController(); + final _scrollController = ScrollController(); + + + final ScrollController _messageScrollController = ScrollController(); + + + + int activeGift = 0; + + List giftList = [ + {"icon": "assets/gift1.png", "title": "爱心礼物", "price": 30}, + {"icon": "assets/gift2.png", "title": "小小小星星", "price": 30}, + {"icon": "assets/gift3.png", "title": "助威", "price": 30}, + {"icon": "assets/gift4.png", "title": "点赞", "price": 30}, + {"icon": "assets/gift5.png", "title": "崇拜衣柜", "price": 30}, + ]; + + int giftNum = 1; + + + + changeActive(int index){ + activeGift = index; + setState(() { + + }); + } + + + late AnimationController _voiceController; + late Animation _voiceAnimation; + + late AnimationController _giftController; + late Animation _giftAnimation; + + late AnimationController _emojiController; + late Animation _emojiAnimation; + + late AnimationController _moreController; + late Animation _moreAnimation; + + List messageList = [ + {"avatar": "assets/user_avatar.png", "message": "你好", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "你好", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "这周六有空吗?", "type": 2}, + {"avatar": "assets/user_avatar.png", "message": "周六时间不方便,我们约周日下午可以吗?", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "那周六不见不散", "type": 2}, + {"avatar": "assets/user_avatar.png", "message": "你好", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "这周六有空吗?", "type": 2}, + {"avatar": "assets/user_avatar.png", "message": "周六时间不方便,我们约周日下午可以吗?", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "那周六不见不散", "type": 2}, + {"avatar": "assets/user_avatar.png", "message": "你好", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "这周六有空吗?", "type": 2}, + {"avatar": "assets/user_avatar.png", "message": "周六时间不方便,我们约周日下午可以吗?", "type": 1}, + {"avatar": "assets/user_avatar.png", "message": "那周六不见不散", "type": 2}, + ]; + + @override + void initState() { + super.initState(); + + _voiceController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 200), + ); + + _voiceAnimation = Tween(begin: 0.0, end: 1.0).animate(_voiceController) + ..addListener(() { + setState(() {}); + }); + + _giftController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 200), + ); + + _giftAnimation = Tween(begin: 0.0, end: 1.0).animate(_giftController) + ..addListener(() { + setState(() {}); + }); + + _emojiController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 200), + ); + + _emojiAnimation = Tween(begin: 0.0, end: 1.0).animate(_emojiController) + ..addListener(() { + setState(() {}); + }); + + _moreController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 200), + ); + + _moreAnimation = Tween(begin: 0.0, end: 1.0).animate(_moreController) + ..addListener(() { + setState(() {}); + }); + + + + + WidgetsBinding.instance.addPostFrameCallback((_) { + _messageScrollController.animateTo( + _messageScrollController.position.maxScrollExtent, // 滚动到最大可滚动位置 + duration: const Duration(milliseconds: 300), + curve: Curves.easeOut, + ); + }); + } + + + @override + void dispose() { + super.dispose(); + _controller.dispose(); + _voiceController.dispose(); + _giftController.dispose(); + _emojiController.dispose(); + _moreController.dispose(); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: (){ + _emojiController.reverse(); + _voiceController.reverse(); + _giftController.reverse(); + _moreController.reverse(); + FocusScope.of(context).unfocus(); + }, + child: Scaffold( + backgroundColor: const Color.fromRGBO(250, 250, 250, 1), + appBar: PageAppbar(title: "林园园", right: Container( + margin: EdgeInsets.only(right: 28.w), + child: InkWell( + child: Image.asset( + "assets/menu_icon.png", + width: 31.w, + height: 35.w, + ), + ), + ),), + body: Column( + children: [ + Expanded( + child: SingleChildScrollView( + controller: _messageScrollController, + child: Container( + padding: EdgeInsets.symmetric( + horizontal: 20.w, + vertical: 28.w + ), + child: Column( + children: [ + Container( + width: 710.w, + height: 351.w, + padding: EdgeInsets.all(20.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + border: Border.all(width: 1, color: const Color.fromRGBO(117, 98, 249, .32)), + gradient: LinearGradient( + begin: Alignment.topCenter, // 对应 180deg:从上到下 + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(248, 242, 255, 1), // 顶部透明白 + Color.fromRGBO(255, 255, 255, 1), // 底部纯白 + ], + stops: [0.0, 1.0], + ), + ), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + "林媛媛", + style: TextStyle( + fontSize: 32.w, + color: const Color.fromRGBO(51, 51, 51, 1), + fontWeight: FontWeight.w500 + ), + ), + SizedBox(width: 19.w,), + Container( + width: 87.w, + height: 26.w, + margin: EdgeInsets.only(right: 8.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(26.w)), + color: const Color.fromRGBO(246, 237, 255, 1) + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + "assets/real_name.png", + width: 16.w, + ), + SizedBox(width: 5.w,), + Text( + "实名", + style: TextStyle( + fontSize: 18.w, + color: const Color.fromRGBO(160, 92, 255, 1) + ), + ) + ], + ), + ), + 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: 14.w,), + Row( + children: [ + SizedBox(width: 12.w,), + Image.asset( + "assets/female.png", + width: 20.w, + height: 20.w, + ), + SizedBox(width: 2.w,), + Text( + "·19", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, 1), + ), + ), + SizedBox(width: 32.w,), + Text( + "北京", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, 1), + ), + ), + SizedBox(width: 32.w,), + Text( + "160cm", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, 1), + ), + ), + ], + ) + ], + ), + Container( + width: 40.w, + height: 40.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(40.w)), + border: Border.all(width: 1, color: const Color.fromRGBO(158, 149, 201, 1)) + ), + child: Center( + child: Icon( + Icons.keyboard_arrow_right, + size: 20.w, + color: const Color.fromRGBO(51, 51, 51, 1), + ), + ), + ) + ], + ), + SizedBox(height: 20.w,), + Text( + "喜欢在广州的早茶里抢最后一个虾饺,也能在深夜的猎德大桥喜欢在广州的早茶里抢最后一个虾饺,也能在深夜的猎德大桥喜欢在广州的早茶里抢最后一个虾饺,也能在深夜的猎德大桥.........", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(144, 144, 144, 1) + ), + ), + SizedBox(height: 14.w,), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + child: Image.network( + "https://fastly.picsum.photos/id/64/800/800.jpg?hmac=NBZ4_-vqzD6p25oCeaW0H5vH-ql9zzei-SqJNeUo1QU", + width: 158.w, + height: 158.w, + ), + ), + ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + child: Image.network( + "https://fastly.picsum.photos/id/985/800/800.jpg?hmac=DfRt99HFbMJ96DlN-poOhruWYRsexESE94ilLC3g1rU", + width: 158.w, + height: 158.w, + ), + ), + ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + child: Image.network( + "https://fastly.picsum.photos/id/703/800/800.jpg?hmac=-bRTkPxnsiQ5kCo2tfXj6tFrXMD7YnVx7bQ0STno3Tg", + width: 158.w, + height: 158.w, + ), + ), + ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + child: Image.network( + "https://fastly.picsum.photos/id/392/800/800.jpg?hmac=kG-nWTx3JQTI-0F7oq9G6VyD_3GNJg4eRUsYX4yRHgc", + width: 158.w, + height: 158.w, + ), + ), + ], + ) + ], + ), + ), + SizedBox(height: 60.w,), + Text( + "昨天 下午 14:46", + style: TextStyle( + fontSize: 21.w, + color: const Color.fromRGBO(144, 144, 144, 1) + ), + ), + ...messageList.map((e){ + if(e["type"] == 1){ + return ChatMessage(avatar: e["avatar"], message: e["message"]); + } else { + return MyMessage(avatar: e["avatar"], message: e["message"]); + } + }), + ], + ), + ), + ) + ), + Container( + padding: EdgeInsets.only( + top: 17.w, + right: 28.w, + left: 31.w + ), + color: Colors.white, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + width: 552.w, + height: 77.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(8.w)), + color: const Color.fromRGBO(242, 242, 242, 1) + ), + child: Center( + child: TextField( + controller: _messageController, + keyboardType: TextInputType.number, + style: TextStyle( + fontSize: ScreenUtil().setWidth(28), + height: 1 + ), + decoration: InputDecoration( + contentPadding: EdgeInsets.symmetric( + vertical: 0, + horizontal: 34.w + ), + 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; + }, + ), + ), + ), + InkWell( + onTap: (){ + messageList.add({ + "avatar": "assets/user_avatar.png", + "message": message, + "type": 2 + }); + message = ""; + + _messageController.value = TextEditingValue( + text: message, + selection: TextSelection.fromPosition(TextPosition(offset: message.length)), + ); + + + + setState(() { + + }); + + WidgetsBinding.instance.addPostFrameCallback((_) { + _messageScrollController.animateTo( + _messageScrollController.position.maxScrollExtent, // 滚动到最大可滚动位置 + duration: const Duration(milliseconds: 300), + curve: Curves.easeOut, + ); + }); + + }, + child: Container( + width: 120.w, + height: 63.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(8.w)), + color: const Color.fromRGBO(117, 98, 249, 1) + ), + child: Center( + child: Text( + "发送", + style: TextStyle( + fontSize: 31.w, + color: Colors.white + ), + ), + ), + ), + ) + ], + ), + ), + Container( + padding: EdgeInsets.symmetric(vertical: 28.w, horizontal: 56.w), + color: Colors.white, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: (){ + _emojiController.reverse(); + _giftController.reverse(); + _moreController.reverse(); + if (_voiceController.isCompleted) { + _voiceController.reverse(); + } else { + _voiceController.forward(); + } + setState(() { + + }); + }, + child: Image.asset( + "assets/chat_voice.png", + width: 39.w, + height: 39.w, + ), + ), + InkWell( + child: Image.asset( + "assets/chat_video.png", + width: 39.w, + height: 39.w, + ), + ), + InkWell( + onTap: (){ + _voiceController.reverse(); + _emojiController.reverse(); + _moreController.reverse(); + if (_giftController.isCompleted) { + _giftController.reverse(); + } else { + _giftController.forward(); + } + setState(() { + + }); + }, + child: Image.asset( + "assets/chat_gift.png", + width: 39.w, + height: 39.w, + ), + ), + InkWell( + onTap: (){ + _voiceController.reverse(); + _giftController.reverse(); + _moreController.reverse(); + if (_emojiController.isCompleted) { + _emojiController.reverse(); + } else { + _emojiController.forward(); + } + setState(() { + + }); + }, + child: Image.asset( + "assets/chat_emoji.png", + width: 39.w, + height: 39.w, + ), + ), + InkWell( + onTap: (){ + _voiceController.reverse(); + _giftController.reverse(); + _emojiController.reverse(); + if (_moreController.isCompleted) { + _moreController.reverse(); + } else { + _moreController.forward(); + } + setState(() { + + }); + }, + child: Image.asset( + "assets/chat_more.png", + width: 39.w, + height: 39.w, + ), + ), + ], + ), + ), + AnimatedBuilder( + animation: _voiceAnimation, + builder: (BuildContext context, child) { + return Opacity( + opacity: _voiceAnimation.value, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: (){}, + child: Container( + height: 343.w * _voiceAnimation.value, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InkWell( + onTap: (){ + print(1111); + }, + child: Container( + width: 196.w, + height: 196.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(196.w)), + border: Border.all(width: 1, color: const Color.fromRGBO(117, 98, 249, 1)) + ), + child: Center( + child: Container( + width: 184.w, + height: 184.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(184.w)), + gradient: LinearGradient( + begin: Alignment.centerLeft, // 从左开始 + end: Alignment.centerRight, // 到右结束(90度) + colors: [ + Color.fromRGBO(131, 89, 255, 1), // 紫色 + Color.fromRGBO(61, 138, 224, 1), // 蓝色 + ], + ), + ), + child: Center( + child: Image.asset( + "assets/mic_line.png", + width: 72.w, + height: 85.w, + ), + ), + ), + ), + ), + ), + SizedBox(height: 22.w,), + Text( + "按住说话", + style: TextStyle( + fontSize:23.w, + color: const Color.fromRGBO(144, 144, 144, 1), + ), + ) + ], + ), + ), + ), + ); + }, + ), + AnimatedBuilder( + animation: _giftAnimation, + builder: (BuildContext context, child) { + return Opacity( + opacity: _giftAnimation.value, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: (){}, + child: Container( + height: 620.w * _giftAnimation.value, + child: Column( + children: [ + Container( + height: 95.w, + padding: EdgeInsets.only(left: 59.w), + child: Row( + children: [ + Text( + "互动", + style: TextStyle( + fontSize: 26.w, + color: const Color.fromRGBO(144, 144, 144, 1) + ), + ), + SizedBox(width: 80.w,), + Text( + "礼物", + style: TextStyle( + fontSize: 26.w, + color: const Color.fromRGBO(117, 98, 249, 1), + fontWeight: FontWeight.w700 + ), + ), + ], + ), + ), + Expanded( + child: Wrap( + children: [ + ...giftList.asMap().entries.map((entry){ + return GiftItem(item: entry.value, active: activeGift, index: entry.key, changeActive: changeActive); + }), + ], + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 20.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Image.asset( + "assets/rose_gift.png", + width: 43.w, + height: 43.w, + ), + SizedBox(width: 17.w,), + Text( + "9", + style: TextStyle( + fontSize: 26.w, + color: const Color.fromRGBO(51, 51, 51, 1) + ), + ), + SizedBox(width: 24.w,), + Image.asset( + "assets/first_pay.png", + width: 137.w, + height: 66.w, + ), + ], + ) , + 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 + ), + ), + ), + ) + ], + ) + ], + ), + ) + ], + ), + ), + ), + ); + }, + ), + + AnimatedBuilder( + animation: _emojiAnimation, + builder: (BuildContext context, child) { + return Opacity( + opacity: _emojiAnimation.value, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: (){}, + child: Container( + height: 490.w * _emojiAnimation.value, + child: EmojiPicker( + onEmojiSelected: (Category? category, Emoji emoji) { + print(category); + print(emoji.emoji); + message += emoji.emoji; + + _messageController.value = TextEditingValue( + text: message, + selection: TextSelection.fromPosition(TextPosition(offset: message.length)), + ); + setState(() { + + }); + }, + onBackspacePressed: () { + // Do something when the user taps the backspace button (optional) + // Set it to null to hide the Backspace-Button + }, + textEditingController: _controller, + scrollController: _scrollController, + config: Config( + locale: const Locale("zh"), + height: 490.w * _emojiAnimation.value, + checkPlatformCompatibility: true, + viewOrderConfig: const ViewOrderConfig(), + emojiViewConfig: EmojiViewConfig( + // Issue: https://github.com/flutter/flutter/issues/28894 + emojiSizeMax: 28 * + (foundation.defaultTargetPlatform == + TargetPlatform.iOS + ? 1.2 + : 1.0), + noRecents: Text( + '暂无最近使用', + style: TextStyle(fontSize: 20, color: Colors.black26), + textAlign: TextAlign.center, + ) + ), + skinToneConfig: const SkinToneConfig(), + categoryViewConfig: const CategoryViewConfig(), + bottomActionBarConfig: const BottomActionBarConfig( + enabled: false + ), + searchViewConfig: const SearchViewConfig(), + ), + ), + ), + ), + ); + }, + ), + + AnimatedBuilder( + animation: _moreAnimation, + builder: (BuildContext context, child) { + return Opacity( + opacity: _moreAnimation.value, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: (){}, + child: Container( + width: 750.w, + padding: EdgeInsets.symmetric(horizontal: 53.w), + height: 343.w * _moreAnimation.value, + color: Colors.white, + child: Wrap( + spacing: 90.w, + + children: [ + InkWell( + onTap: () async { + + int sdk = 0; + if (Platform.isAndroid) { + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); + final androidInfo = await deviceInfo.androidInfo; + sdk = androidInfo.version.sdkInt; + } + var res; + if(sdk <= 32){ + res = await handlePermission( + context, + "为了上传发送图片,我们需要获取您设备的相册读取权限", + [ + Permission.photos, + ] + ); + } else { + res = true; + } + if(res){ + final ImagePicker picker = ImagePicker(); + final List list = await picker.pickMultiImage( + + // limit: 5, + ); + // setState(() { + // imageList.addAll(list); + // }); + } else { + toast("权限获取失败", context); + } + }, + child: Column( + children: [ + Container( + width: 100.w, + height: 100.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + color: const Color.fromRGBO(247, 247, 247, 1) + ), + child: Center( + child: Image.asset( + "assets/img_icon.png", + width: 69.w, + height: 69.w, + ), + ), + ), + SizedBox(height: 13.w,), + Text( + "图片", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, 1) + ), + ) + ], + ), + ), + InkWell( + onTap: () async { + var res = await handlePermission( + context, + "为了拍照上传发送图片,我们需要获取您设备的相机和相册存取权限", + [ + Permission.camera, + Permission.photos, + Permission.storage, + ] + ); + if(res){ + final ImagePicker _picker = ImagePicker(); + final XFile? image = await _picker.pickImage(source: ImageSource.camera); + + if (image != null) { + // 这里你可以使用image.path来访问图片的本地路径 + // 或者使用image.readAsBytes()来获取图片的字节数据 + // 例如,你可以将图片显示在屏幕上,或者上传到服务器 + // 这里只打印图片路径作为示例 + print(image.path); + } + } else { + toast("权限获取失败", context); + } + }, + child: Column( + children: [ + Container( + width: 100.w, + height: 100.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + color: const Color.fromRGBO(247, 247, 247, 1) + ), + child: Center( + child: Image.asset( + "assets/camera_icon.png", + width: 69.w, + height: 69.w, + ), + ), + ), + SizedBox(height: 13.w,), + Text( + "相机", + style: TextStyle( + fontSize: 23.w, + color: const Color.fromRGBO(51, 51, 51, 1) + ), + ) + ], + ), + ), + ], + ), + ), + ), + ); + }, + ), + ], + ), + ), + ); + } +} + + + +class GiftItem extends StatefulWidget { + final Map item; + final int active; + final int index; + final void Function(int) changeActive; + const GiftItem({super.key, required this.item, required this.active, required this.index, required this.changeActive, }); + + @override + State createState() => _GiftItemState(); +} + +class _GiftItemState extends State { + @override + Widget build(BuildContext context) { + return InkWell( + onTap: (){ + widget.changeActive(widget.index); + }, + child: Container( + width: 167.w, + height: 189.w, + padding: EdgeInsets.only(top: 21.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(18.w)), + color: Color.fromRGBO(117, 98, 249, widget.active == widget.index ? .2 : 0), + border: Border.all(width: 1, color: Color.fromRGBO(117, 98, 249, widget.active == widget.index ? 1 : 0)) + ), + child: Column( + children: [ + Image.asset( + widget.item["icon"], + width: 82.w, + height: 82.w, + ), + SizedBox(height: 15.w,), + Text( + widget.item["title"], + style: TextStyle( + fontSize: 22.w, + color: const Color.fromRGBO(51, 51, 51, 1) + ), + ), + SizedBox(height: 2.w,), + Text( + "${widget.item["price"]}支", + style: TextStyle( + fontSize: 15.w, + color: const Color.fromRGBO(144, 144, 144, 1) + ), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/pages/notify_page.dart b/lib/pages/notify_page.dart new file mode 100644 index 0000000..f5f0c8b --- /dev/null +++ b/lib/pages/notify_page.dart @@ -0,0 +1,50 @@ +import 'package:dating_touchme_app/components/chat_message.dart'; +import 'package:dating_touchme_app/components/page_appbar.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class NotifyPage extends StatefulWidget { + const NotifyPage({super.key}); + + @override + State createState() => _NotifyPageState(); +} + +class _NotifyPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: const Color.fromRGBO(250, 250, 250, 1), + appBar: PageAppbar(title: "系统通知", right: Container( + margin: EdgeInsets.only(right: 28.w), + child: InkWell( + child: Image.asset( + "assets/notify_icon.png", + width: 31.w, + height: 35.w, + ), + ), + ),), + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 29.w), + child: Column( + children: [ + SizedBox(height: 56.w,), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ChatMessage(avatar: "assets/system_notifi.png", message: "【专属福利】收到2张公开体验卡,助你免费公开连线,快速脱单,有效期1天,价值40玫瑰"), + ], + ), + ), + ), + ); + } +} diff --git a/lib/router/app_router.dart b/lib/router/app_router.dart index 169ea23..d8d05f1 100644 --- a/lib/router/app_router.dart +++ b/lib/router/app_router.dart @@ -2,6 +2,8 @@ import 'package:dating_touchme_app/pages/complete_info.dart'; 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/notify_page.dart'; import 'package:dating_touchme_app/pages/open_webview.dart'; import 'package:dating_touchme_app/pages/test_page.dart'; import 'package:dating_touchme_app/pages/user_info_page.dart'; @@ -67,6 +69,19 @@ class AppRouter { return LiveRoomPage(id: id,); }, ), + GoRoute( + name: RouteNames.notify, + path: RoutePaths.notify, + builder: (context, state) => const NotifyPage(), + ), + GoRoute( + name: RouteNames.message, + path: RoutePaths.message, + builder: (context, state) { + final id = int.parse(state.uri.queryParameters['id'] ?? '0'); + return MessagePage(id: id,); + }, + ), GoRoute( name: RouteNames.test, path: RoutePaths.test, diff --git a/lib/router/route_paths.dart b/lib/router/route_paths.dart index 6e2cd69..dc6a53a 100644 --- a/lib/router/route_paths.dart +++ b/lib/router/route_paths.dart @@ -6,6 +6,8 @@ class RouteNames { static const completeInfo = 'completeInfo'; static const userInfo = 'userInfo'; static const liveRoom = 'liveRoom'; + static const notify = 'notify'; + static const message = 'message'; static const test = 'test'; } @@ -16,5 +18,7 @@ class RoutePaths { static const completeInfo = '/completeInfo'; static const userInfo = '/userInfo'; static const liveRoom = '/liveRoom'; + static const notify = '/notify'; + static const message = '/message'; static const test = '/test'; } diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index cf6189a..bc3d5c3 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -23,47 +23,41 @@ String formattedTime(int timestamp){ -Future handlePermission(BuildContext context, String content) async { - PermissionStatus status; - status = await Permission.location.status; - +Future handlePermission(BuildContext context, String content, List permissions) async { + var status = await permissions[0].status; final Completer completer = Completer(); - if (status.isDenied) { - // 如果没有权限,显示权限提示弹窗 + // 无权限的话就显示设置页面 showDialog( - context: context, - builder: (BuildContext context) { - return AlertDialog( - title: Text("提示"), - content: Text(content), - actions: [ - TextButton( - child: Text("确定"), - onPressed: () async { - Map statuses; - statuses = await [ - Permission.location, - ].request(); - - Navigator.of(context).pop(); - completer.complete(true); - }, - ), - TextButton( - child: Text("取消"), - onPressed: () { - Navigator.of(context).pop(); - completer.complete(false); - }, - ), - ], - ); - }, - ); + context: context, + builder: (BuildContext context) { + // 返回一个 AlertDialog 组件 + return AlertDialog( + title: Text("提示"), + content: Text(content), + actions: [ + // 通常是按钮 + TextButton( + child: Text("确认"), + onPressed: () async { + Map statuses = await permissions.request(); + Navigator.of(context).pop(); + completer.complete(true); + }, + ), + // 通常是按钮 + TextButton( + child: Text("取消"), + onPressed: () { + Navigator.of(context).pop(); + completer.complete(false); + }, + ), + ], + ); + }); } else { completer.complete(true); } - return completer.future; } \ No newline at end of file diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 64a0ece..58da7cf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,9 +6,13 @@ #include "generated_plugin_registrant.h" +#include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) emoji_picker_flutter_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "EmojiPickerFlutterPlugin"); + emoji_picker_flutter_plugin_register_with_registrar(emoji_picker_flutter_registrar); g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2db3c22..7d327f4 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + emoji_picker_flutter file_selector_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 6a65a78..f0b169f 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,12 +6,16 @@ import FlutterMacOS import Foundation import agora_rtc_engine +import device_info_plus +import emoji_picker_flutter import file_selector_macos import iris_method_channel import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AgoraRtcNgPlugin.register(with: registry.registrar(forPlugin: "AgoraRtcNgPlugin")) + DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) IrisMethodChannelPlugin.register(with: registry.registrar(forPlugin: "IrisMethodChannelPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 4ac788a..380be90 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -121,6 +121,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.8" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.1.2" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.2" dio: dependency: "direct main" description: @@ -145,6 +161,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.4.0" + emoji_picker_flutter: + dependency: "direct main" + description: + name: emoji_picker_flutter + sha256: "9a44c102079891ea5877f78c70f2e3c6e9df7b7fe0a01757d31f1046eeaa016d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.3.0" fake_async: dependency: transitive description: @@ -885,6 +909,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.14.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "5.5.4" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.5" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 223a1ce..9787558 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,6 +49,8 @@ dependencies: roundcheckbox: ^2.0.5 webview_flutter: ^4.7.0 flutter_datetime_picker_plus: ^2.2.0 + emoji_picker_flutter: ^4.3.0 + device_info_plus: ^10.1.0 dependency_overrides: tdesign_flutter_adaptation: 3.16.0 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 16d71f5..9d6db11 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,6 +7,7 @@ #include "generated_plugin_registrant.h" #include +#include #include #include #include @@ -14,6 +15,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { AgoraRtcEnginePluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("AgoraRtcEnginePlugin")); + EmojiPickerFlutterPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); IrisMethodChannelPluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 970ef46..73cfd3f 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST agora_rtc_engine + emoji_picker_flutter file_selector_windows iris_method_channel permission_handler_windows