From 8a8c81b7d2540d0d2536d45df6da810453032fce Mon Sep 17 00:00:00 2001 From: minbb Date: Wed, 29 Oct 2025 18:10:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=88=97=E8=A1=A8=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/mine/icon_message_checbox.png | Bin 0 -> 3991 bytes images/mine/icon_message_close.png | Bin 0 -> 4379 bytes images/mine/icon_message_readed.png | Bin 0 -> 4313 bytes images/mine/icon_message_unread.png | Bin 0 -> 4375 bytes lib/app_settings/app_colors.dart | 1 + .../message/messageList/messageList_page.dart | 528 ++++++++++++++---- lib/tools/dateTool.dart | 39 ++ 7 files changed, 450 insertions(+), 118 deletions(-) create mode 100644 images/mine/icon_message_checbox.png create mode 100644 images/mine/icon_message_close.png create mode 100644 images/mine/icon_message_readed.png create mode 100644 images/mine/icon_message_unread.png diff --git a/images/mine/icon_message_checbox.png b/images/mine/icon_message_checbox.png new file mode 100644 index 0000000000000000000000000000000000000000..d911945b0c70d297344bc7c2f8abb45224c1ce6c GIT binary patch literal 3991 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 literal 0 HcmV?d00001 diff --git a/images/mine/icon_message_close.png b/images/mine/icon_message_close.png new file mode 100644 index 0000000000000000000000000000000000000000..2753fc2a3b111de987819358490999ac28691048 GIT binary patch literal 4379 zcmW+)c|4Te7k_4B=D`@dtdANROIey^iAD&aD7=JB$d+Xys#i2KVW==9yDTC5o;9MZ zQDn~+*=0@PE$TP@{t)_AX%&PK+$S#s^NIJ%f;uT+X&hh_p@nO#4X0=AIj1SGm%RV{- zps8*d`)px)bkgn2Gem;NK5>fyn$av#=*|M-X&qE<1XT&lYYu}Wopr^YWxOVWIt(3G^`@TI( zBRf$Tp0x!4%;xDr2L>qul1VyBS&*T5aFxf>ZeRdC5@1uc&2{fQe<~Np49!=8aAY)* zznNOm_i93r|9fhtntyPPl9-fp! zcPFbzb}*2w&1J;{46)g!8ML?^ zSF%0freszRM~(xYIf=@0W+%}EdjPJ){9W!)f)f#QECEO{qIY{*_9=>`_6WyuS^7<1 zH4vZpKtk#!M|hA*+uC3krH3J8#_S4&w~0fYB8f-_xkopDV+7Ezw%1Zy2606uwU`Z^ zz4agffB*GWW!Gmx{xEa}TeZdL;=h7{hU2h@v!4B@A!{1*WNnV`V<9NUlOFmZMaUHK zrfB9^YV}&%Sq93d!P3?>1&NgBnkEmUxdaW?n5JT0b;$@Mg`6WL7Dd+{wlH84QRsff z>F}YHHE}tJNlu`m%CCP-fgvfImkZ)`rC)oEN|SX4>v}&2#Y?0BNO{amr%JlEW{hXQ z9R39Yu2vSim--1-R5I`QoS6!uXYvGsF0{MjVg~>zu?zI->ZC{=Ul1Dg@wK(o{3aGT zg2NBNU}CSNZu1wpCXJ!-mM|$XSAE-*+4U@%@{=EUA0Y$;OH6aA9yB!%ek_&uy0Q52d9Ix+f4(lNFL_)SMKd>=)y=@n(_1nZFsDjFlT5>M8dX; z95a`?YJF=lHsHs)CpB1dl|StNEHX{Z8$jO>@O*h(Kc zTp?+FXbj+(XUKshBUZb+r!B15s_#}Ka=KeX? zdDxtK=YvGz-sj-prv0Du|IODpTy2_qC^kSYBOH1eua6kZ*#A90|57L@$|Z(OvU82z z?Q(b&gnZk_4A(Abc}P-Ypj_r}4KSkr4xe`AHrbp~@DRnsbp)hI@}v*#il2(H2}mXe z{xlTCz*_@%&}r&i{FubPo%QjE(iOkFBmLS{?#63T&M^?__{D_#FXt$akNI32_{zWa z95zeD9iB)n%dv1ca{S?tO4ipers-3;i?TCE(KuXUU(L8Nk@9bt-o49`lON1p&E!AY zKMs}D{IjJoRniB@?X zRTwc^RDJYHDD~YzI+NG5%hzVru?`H+9aNBc`LT=1#6>Ztb;W?63_f{wE11!NwdeIz z8LV!qxr)&{zo`H4QsMu;6Z8A*SkWm5p>yxPXnYmsFsb{dC+3))5Nz2i@P|!tiIkLB z`ioyPS_^+>rr*)@NmgS4{=$d-6O7OXl*f)7hx+gEFeNt5#J4Viyl={hZG|0YH*^JI zI@3iv6Q3}9E80&6L!VcoM*|jN%qbRbj>3gu-Oc_KM=2p86|6A;x;k%N?aGhG08e99f zlQ*ZmRg{47AK zN~LYX3sLBW^}@ZrBG$3UJeNW;Ww?CW^6Z$K7q?SSJ^%lB;?lOscP*7F&7aFw1@PLI z)gPtN*&eam^`elvrg(Yj36?+eMMn<)EFxn<&GEawH#yWWfj-#17u4|k_IqP^MXpKDO^g}W zVB!rIuPq#9NA+h;)G<{(hfaHrbSH0HmLr8#+Aj@@Hwr=R5l zFr$IB4ohC9NaC3({XeQ|6sc#me7uB@R&}s%ua|$i+UB10Ha(}-bNQ^}`N87P&t$aO zlYD>kQ)ee%MKBY2f2gEm+?B%4lrbTedgo()625H+NJ_|m z=v)YB^zw#w@9T=D;oR>x&tAGPqfZK}<6Z`^99%5(LWVLQeK`z`x`cAg)>;}+MisuJ zBmRr8jJg|Fjz&L@SVpedKgG@{9bh74%dd9a%kdCkde_*9zr7~)cRS`a7UV4pskiFh zi?9@8SPCabMh~^M?#Mw)f@zuSS)545dm$-hY3-H7HGz^bWOjWaU*pQEnar^lwYJmTzR!8oOj&j(VElcl?jH# zw9G?Sq~mrslP%SbYFqX33` z3>aa*QE;J0VpAE7BYscT$Dz^p_R1{#*zR8sDm3+3%rIS&?D@SjvRgVJeXrczsBmx< zCP{~FrRwAMG+H+AWIjeSx&Xt!6nt`^Ltf0_&!D*ygd4meNLx!JBVpve-ESPF<#af7 zS99k~7glS<4<86YS%8jUi@x`xzW{;DR;I7o!Ik0kiLl+=URogc6IBq`NO+qu*85IT zA{SoAua>MuHXuUkY;Da778!Z)B*AZPq``cX2R9t{^-&;!c|+E&+_d{3ji6twO1&Oqmt3A6FVLB&HSMAT)$WZb_A2Jt4dcL>VAuaU_7KBJlNZgpbJf=_uSpS#;x&obt)l6Be{f6!N|THRFhISFvCmIlqAF934A*9f3UOTZj^{_K>Bb z4srN(ZB@YO#lz$C@1lc^KM4P7k~N!E*0my$)uEXKbR1bWpHv*GrU~It?%d1Vr8Zc( z=59#=<}a*$xMZ*MnM+8Vb;NfA!wjUc6$*(}Xtwz^u~Z}s2|qctW=4}vfj^z0PU^!x z5(yWsL4tA=3tDp0ThC)4n$7$L8k0>{&ma}2eCw4FWJe-+dGq?N-gJslD61D$Z<&^( zHY=Wm3s`3f;M9l#S&BV=Iwwiw5)C=*>`4xRQ5Ff+cXFw@R>x)uqlvDRsYQ(_SdcAY z5j>GkhuHitSg<3#TW)F}q46p_0*P>TPfZk#vxhyxEOR_|-CCE@95Dd2Oot%l$|m^T zII*Mta*z_h-0Y4tbKLBQ#1dl$U^JfEqf&S?#~wO^DuUpu|BQtC^ii>v$WohjGeB|> zh^mx;hviLhLQ3&WQm8UG-MphA5mo<_l_J=&W3!J-X<5ZG+gVe)A|NE#flJD$?$mtc^Q9~YE zzT(o6J-*ceeEX=Wowg#t=~pFB>XD^p?H*N$2zcx-gVMX~dBbwn#J+mMG=WN@m_Xo8 zJIH~pz{^sL`H5l}PQC(LQjd-&3;<<>o_KcHY{&yjWzA%H6xVL)QmOtfwdV!r6BDzA zhYGKsJ)ogn>V||3#DUoRhu29lTK>Oz_J6pUkzqRR!s47MEmAP$MS(aLn?6jq_3Nat z0$Zrpb9AVFyMY!Fl2kDnAOzn@8fJY7wEq1IC{xhUQCf(h{7I%xe9hcgC?os-NVNx$ z;65q0YK*U3%#f5Fb^rAU!`>yrdy>r7pk$p$;k6IVMj!98Gb>ED4|aS z56F7?C@e&3xg$IRdYY%qHG$-#^&QXbBb`;UlR&xzxw99jOb{q+X{RGSzc^)L@!VMzcZ{R?^}XUX*c0Xw6fC;$Ke literal 0 HcmV?d00001 diff --git a/images/mine/icon_message_readed.png b/images/mine/icon_message_readed.png new file mode 100644 index 0000000000000000000000000000000000000000..6d781ba99da75e35a5c724744a304ad3c8e74694 GIT binary patch literal 4313 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 F?SG8Vw#Wbg literal 0 HcmV?d00001 diff --git a/images/mine/icon_message_unread.png b/images/mine/icon_message_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..b87c1c324913928adc4c0acc5b04f91ec2af2507 GIT binary patch literal 4375 zcmV+y5$NuTP)kDQUXZ;1VB8FK0%^Lpinrd zpLnnne-OT?02NqOfPkz@!wXbEgn$%?g4=)O<0AbcueZnat9-r9)8lpfduFSE>%&(; zKoW+)9RdWi4fbE;CjZFSMH0Dcwaavqk1|gp%j@>{%$7oSGYNH}P9z0L_)4Y#0g05- zz<_{!4^9)PcL)&7HrONW2NgqIs1r#6GSDcPW<-LInu6>x^Id_AfZXfo;@}Yo0|Nr` zJvi%ZbQ+H6w&hSL8jY9&&Z^^Sy0Xv~{`>yb50n1qg`BVWGe@1i{iZ6xv?rdx8ZT zXyP<%5@}dK3>3O}#hr6lD5fBAd|mb2RYAe#!z;AX-$TCJ1mr+hp|kH$w7#Y|phG~> zD{deP%aEhWFn}z;c%M!PUqK4kQDrDlx(9?{1VP}Fc_>i21%zPu#QLE;Lx9p9AOz!3 z(8m=12}+00Q@R2K3rQ>}k8IP%LH?7asDWLne)^`>mfW|8TW!GH z@1_B{gVFmF?|F~4a|}?Le=^@JAZ92h7`5X9NX)~=+8tfOqXwr_YkgYd`70jI zqVH;SZp){p0BL;G*y@M=ui@dWj`*ez8)|JcfK0+-OR*t&>8eA4>(rNyOZAmuwXL+sZim~ zV2Lgi(7s0uAQozAPZfX|LAV&NB__`GLm@GL^jOJX2A>Yd9gcImg|*kFfZi}oY@F=Z zseqW>3l-vI4bH3n<)g?SU*FUBo5*AO@+yLKo`)i5)~&H&V&p_0P6K3W_?SCYFA4@= z030|*as|O>l?MrV#|7njJ8`;o3LsO1wf9|7(eXKe04R_`n+Z@*4mLu|ww@m&$w`nD z2gJak4Q{>9g8fHe9}VynHi8|mq=3eZiJijk6bA%56ouP(eswmmQ+aX}v{ZhSwsVu> zvyP&GV2``Brd8C3fKKg54x6cc+_4vYS+{^o$51gqOvAK+!J@QYAm`$mkYtaJB7m43 zt5M;=;yPD1V(NyJ%YLnPHI__F74R=RAX7t%&m9YBS4S0JhL!d@#a7mS$O_1`>o9B& z%I5-2#|VOyHB72Cp8Xj~RzQZ_v9ht0bM0a4;J1i-XDgX9*#Idq{3TPNbwlG$vjE6P zvjLQ;53>L=!Ew#xa~oz~erv7tM5C@dL%g@L$5pP z3!1S!%CH_u3dl6I8mm*-+IkegR15z?aYB!t0f{s|!7=u_W3Js_-{!ya9+#{uZ%d9_ z2P6sq@;4bEauKddk9RLEq)^}{$!^q105PM7lAEG!v=O1eUw=jv>bQu;qKU}_O-ura z`jL!SwbjR)L3?&TCfU_G3`i!} zx|PCI>)?X@5FqLm;ZPCyu2_MCqewI$)96vLGAFxMa_hBZT_?*LT>ZgOBpMKPl%t1= zz;^=*92iBS0O9E285AY%>?P{(Y;LvL4vZpEfT$3)jUMU}-&9~jfyhxL7!Zyg8=Y{* zB|dNQQ$2DN2?j*H;pm|vc)c0CUNRNS6fuef0m9LvSXZ*59128?B0+$t&m28e1n+l= z2Y4mw@NRGe83RWVZ$QQ!JsRkAy6CS!;3(n^h`$HSc~_vs7Ho++?hWeXAYc>;0ff`5 zPU2(uX6Pv5tAQ6FoL>3L$$YISF#XR(cHQ*?g#WeRu8!*&a!!GA+Fox_A6Go5S-XH3 z(gKF0KGZAJ3RZKT0vgjMws$<(1w{UlkHS~H0y!TR=CmE(;&w`Uj3WDh$npOws~yGY z=}-#jD6-eyO+dIf-;>YdIv?bDh;&|-y=m4aAm_Qwn!OYtd|onbX4;u%?E%7PADimd zdy$@bDzG!nS_Ncp=<%$c*>Y~h=CnOf&uzu}Dj?jw8Yn{8)Kvx60a-1=3&9HHxYOsb z8Qic=3T&)HwgBP!qm%w;GjRK?4s6gcl8VW}1tt!FLfoq%xtk+^Rd z%!vifU~c6vM%;k#pE5|>1AJbQR?i&PR$|@_$i|#3hi|kQp#Y(a5N)H#O3Xh2vNjjn zFwIL;pbG_DvHt`J*B=@BI>(l54x1U89%iz>+|Pj2=OaC$0%a6%EYt}|8RErOqW%tlU|;{;9yBqazRcj+8y*^tgqWfQ+jHTTTU>3M>KnAbbuYnO{e?YLAr7+^k;B zF9GSbm24Lk@KxYpkRTww!ZF_v3S9n{#Vl$8$m2!ftF!{FuQCM|fEeE%{uafY<40Nr zV%8EdWzu@xzcokfKLgUg3~V74a4X<=%<&9}Ba_=2&qgZ{^E5rCOtgb6Xcc${j=|vx5bk8{%9tiY2qYnS(|9+e z6<6#(0b-PKtme&mexy_2_cwoATz~j$6`OM<=G}nAR>E@r3WSUboL>3s8k=)vbIJ|K zMFMVbu^zFU{Le#XpFET@n*vTiTywE(9*k@lBg586f@{cAyG9-OcljaCT@WWAg4fEN z440S^D)8S=ZexIB?V7s;&&DdS5$o%K#8$>~;R^hE5i{Ka6iAp>5sq*jV@s^8KVWVh zkPFu#5U5zfR0>ca;ka1EtY}MtRX{EefA+g&gx9D*%L=TmKhUOCKyXnu=4R$PKd3-v z1+tspiSa!^JoX{8H-QyUfqV*VtUplcCLo+X>=(O?^BfhZRRI&z9?p3IV(jowPmB!w=t2SS8Id<2zQlDQ9~;rN z0zQj#D}Xm3Q-OE#rXT!Dq`=EZ5u`7#B1kXO??mQlW}!e(36 z*537?(F4X}012)H6)~v-2yg_t4;Y$#@kSYd0vn49{NbxW=;#5v!GM^>I!6&`7nT49 z0z9nLb8grmB+t6+pNYD$2LodK$hhTe?DzJ8fW`=rs$GO6Sjm{t1C>Mp!chd$c_zSt zfcDJpoeef&+q=Nf8KXuIC>8|>3JOONBg5_o0(m!6WCqwyIWk4MQG2o2(F5&@2E>da zBGF``^6pcKJNy^j8tz`mLk&C>qtSrCWkV(x?2y8paEEtaNq3eb$flMiMmKY8Upxee zG2PBo%eY(Yqr~W88$(E}5|7`9Mh_S}42YR(aTI};=Os?FT-v`K9X(+5Fd#4@97T)_ zi;tJz7C-r;tO6bS=Y}N)_in$YGoUj1P~ZA#B!T#m-gu}`&Y@jvNz^X1xXg>a}SaN z0>fr_<5UY$luP_K3`IAJzM0sQw6ElV8232U5()W7I*n-jIHJJiyL>uQeywa4K+II@ zLmr3M8dBZ)lG7gkdm>5K9rIYq0thNFkc__dn*tJuxs~v*QEgrC|61~O$6T^(fS?jH zCmeY_Qev7l^5~(lWnv7$mMLWg#Q1!XY{Q?iU-Jh>keqk;oVIJ$b@DCOx??hLzOn;i zrdlJfM{tJ+C`RstAAke46Pj$wRH2y44hTdykc_+@!9UEI5)#-N84iu5DW(u!SyK@} z(1K~MIPP={kl?NlF^(kIfUP4orm~HGWnGj%YEldkR6IN+xa%XpAx3Dzr~xowBeZNk z`HR8<*@^;!3JJ-p$gdX>fP$chC|e1600t6{xAOLVtvDQzvp68Aba+T00!9J^Jz&8% zfSD(pv)9H318SWD2P!@V5L9d+(S2+j51#-4fSD(p8(tU{Kx4$jiXNWvJ`E5wcG|}t zci|2Z`b=qB1voPOjg_y1rvd^er@I3off!741>U9`==@yqv5HjmtzhV5=ugwMxFW~GTxl8*G!>9co$!X=OjRh*+*)HzwdMh_4Ktwp(6NMD z!d8;<-*(jaAx%!F#PLc6h{NOBw` zR-YjNv5m$27@%mn=sAL-B6z(A1jFjm03g=YwBHKJt0oHyVR@9-LZLf@*har}w)lQ* z?%MBR0kMK8Bmf2JqUXj21yCU2j|n^6k<$JReh&}GT(Jq3%W!LzITQp#<}U&=S7SQ9 z=yc)<76j3Bz4@>Aw!Gm+pzXYjJcZipO9HZ^&>a@sS#>^+C5ore0002MNkl$q(@NcUH5egvdbM9{D}*KP)>fq2PF72 z2LgcW$au1M%~el84tCic7~GK>$X%T7ZLKMbO$5Tc<5=zhPG)KwS#$#U%KE1b+xb ztkU;#1mrG7+Jgl+2v!8GO$v|+=Gixbe4ZY!o8Pv){f1qI0ClDHp4O}a1jH(F@;8Ef zo=$d$)lUi#kVy!BQ300%1jMCEf^#&{hXVfs00960Ly)=700006Nkl const Color(0xFF808080); // 首页时间灰色颜色(灰色) diff --git a/lib/mine/message/messageList/messageList_page.dart b/lib/mine/message/messageList/messageList_page.dart index dd0cb4ed..74369e70 100755 --- a/lib/mine/message/messageList/messageList_page.dart +++ b/lib/mine/message/messageList/messageList_page.dart @@ -29,6 +29,38 @@ class _MessageListPageState extends State final MessageListLogic logic = Get.put(MessageListLogic()); final MessageListState state = Get.find().state; + // 修改 _showCheckboxes 状态变量为可观察状态 + final RxBool _showCheckboxes = false.obs; + + // 添加选中状态 + final RxList _selectedItems = [].obs; + + // 添加控制通知横幅显示的状态 + bool showNotificationBanner = true; + + // 添加设置状态变量 + final RxBool _pushNotificationEnabled = false.obs; + + // 删除方法 + void deleteSelectedMessages() { + final List selectedMessages = []; + for (int i = 0; i < state.itemDataList.value.length; i++) { + if (_selectedItems[i]) { + selectedMessages.add(state.itemDataList.value[i]); + } + } + + // 调用删除接口 + //logic.deletMessageDataRequest(selectedMessages); + + // 清空选中状态 + _selectedItems.clear(); + _selectedItems.addAll( + List.generate(state.itemDataList.value.length, (index) => false)); + _showCheckboxes.value = false; + setState(() {}); + } + void getHttpData() { logic.messageListDataRequest().then((MessageListEntity value) { setState(() {}); @@ -39,38 +71,60 @@ class _MessageListPageState extends State void initState() { super.initState(); + // 获取当前消息推送设置状态 + _loadPushNotificationStatus(); + getHttpData(); } + // 加载消息推送状态 + void _loadPushNotificationStatus() async { + final bool? enabled = await Storage.getBool('push_notification_enabled'); + _pushNotificationEnabled.value = enabled ?? false; + } + + //添加以时间分组的方法 + Map> _groupMessagesByDate() { + Map> grouped = {}; + state.itemDataList.forEach((item) { + String date = DateTool().dateToYMDString(item.createdAt!.toString()); + if (!grouped.containsKey(date)) { + grouped[date] = []; + } + grouped[date]!.add(item); + }); + return grouped; + } + @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: widget.showAppBar ? TitleAppBar( - barTitle: '消息'.tr, - haveBack: true, - actionsList: [ - TextButton( - child: Text( - '清空'.tr, - style: TextStyle(color: Colors.white, fontSize: 24.sp), - ), - onPressed: () async { - final bool? isDemoMode = - await Storage.getBool(ifIsDemoModeOrNot); - if (isDemoMode == false) { - ShowTipView().showIosTipWithContentDialog('是否清空?'.tr, + barTitle: '消息'.tr, + haveBack: true, + actionsList: [ + TextButton( + child: Text( + '清空'.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + ), + onPressed: () async { + final bool? isDemoMode = + await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { + ShowTipView().showIosTipWithContentDialog('是否清空?'.tr, () async { logic.deletAllMessageDataRequest(); }); - } else { - logic.showToast('演示模式'.tr); - } - }, - ), - ], - backgroundColor: AppColors.mainColor) + } else { + logic.showToast('演示模式'.tr); + } + }, + ), + ], + backgroundColor: AppColors.mainColor) : null, body: EasyRefreshTool(onRefresh: () { logic.pageNo = 1; @@ -80,116 +134,354 @@ class _MessageListPageState extends State }, child: Obx(() { return state.itemDataList.value.isEmpty ? NoData() - : SlidableAutoCloseBehavior( + : Stack( + children: [ + Positioned( + top: 0, + left: 0, + right: 0, + child: Container( + height: showNotificationBanner ? 100 : 70, + child: Column(children: [ + showNotificationBanner + ? Container( + padding: + EdgeInsets.only(left: 10, right: 10), + color: AppColors.messageTipsColor, + height: 30, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('开启消息通知开关,及时获取通知', + style: TextStyle( + color: Colors.black, + fontSize: 20.sp)), + Row(children: [ + !_pushNotificationEnabled.value + ? GestureDetector(child: Text('去开启', + style: TextStyle( + color: Colors.blue, + fontSize: 20.sp)), + onTap: (){ + + }) : SizedBox.shrink(), + SizedBox(width: 10), + InkWell( + child: Image.asset( + 'images/mine/icon_message_close.png', + width: 24.w, + height: 24.w), + onTap: () { + // 可以通过控制一个状态变量来隐藏整个通知栏 + setState(() { + showNotificationBanner = + false; + }); + }), + ]) + ])) + : SizedBox.shrink(), + Container( + padding: + EdgeInsets.only(left: 15.w, right: 24.w, top: 20.h), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text('告警', + style: TextStyle( + fontWeight: FontWeight.w600, + fontSize: 30.sp)), + // 点击多选可以进行删除 + GestureDetector( + onTap: () { + // 没有多选删除的 api接口,无法使用 + // if (_showCheckboxes.value) { + // deleteSelectedMessages(); + // } else { + // setState(() { + // _showCheckboxes.value = + // !_showCheckboxes.value; + // }); + // } + }, + child: _showCheckboxes.value + ? Text('删除', + style: TextStyle( + fontSize: 24.sp, + color: Colors.red)) + : Image.asset( + 'images/mine/icon_message_checbox.png', + width: 30.w, + height: 30.h), + ) + ]), + ) + ]))), + Container( + child: Container( + padding: EdgeInsets.only( + top: showNotificationBanner ? 80 : 50), child: ListView.builder( - itemCount: state.itemDataList.value.length, - itemBuilder: (BuildContext c, int index) { - final MessageItemEntity messageItemEntity = - state.itemDataList.value[index]; - return Slidable( - key: ValueKey(messageItemEntity.id), - endActionPane: ActionPane( - extentRatio: 0.2, - motion: const ScrollMotion(), - children: [ - SlidableAction( - onPressed: (BuildContext context) { - logic.deletMessageDataRequest( - messageItemEntity.id!, () { - logic.pageNo = 1; - getHttpData(); - }); - }, - backgroundColor: Colors.red, - foregroundColor: Colors.white, - label: '删除'.tr, - padding: EdgeInsets.only(left: 5.w, right: 5.w), - ), - ], + itemCount: _buildGroupedListItems().length, + itemBuilder: (BuildContext context, int index) { + var item = _buildGroupedListItems()[index]; + + if (item is String) { + // 日期标题 + return Container( + padding: EdgeInsets.symmetric( + horizontal: 16.w, vertical: 10.h), + color: AppColors.mainBackgroundColor, + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: item.substring(8, 10), + style: TextStyle( + color: Colors.black, + fontSize: 36.sp, + fontWeight: FontWeight.w600, + ), + ), + TextSpan( + text: ' ', + ), + TextSpan( + text: item.substring(5, 7), + style: TextStyle( + color: Colors.grey, fontSize: 20.sp, fontWeight: FontWeight.w400), + ), + ], + ), ), - child: _messageListItem(messageItemEntity, () { - Get.toNamed(Routers.messageDetailPage, - arguments: { - 'messageItemEntity': messageItemEntity - }); - }), ); - }), - ); + } else if (item is MessageItemEntity) { + // 消息项 + return _messageListItem(item, () { + Get.toNamed(Routers.messageDetailPage, + arguments: { + 'messageItemEntity': item + }); + }); + } + return Container(); + }, + ), + ), + ) + ], + ); })), ); } + // 构建分组列表 + List _buildGroupedListItems() { + List items = []; + Map> grouped = _groupMessagesByDate(); + + grouped.forEach((date, messages) { + items.add(date); // 添加日期标题 + items.addAll(messages.map((message) => message)); // 添加该日期下的所有消息 + }); + + // 初始化选中状态 + if (_selectedItems.length != state.itemDataList.value.length) { + _selectedItems.clear(); + _selectedItems.addAll( + List.generate(state.itemDataList.value.length, (index) => false)); + } + + return items; + } + Widget _messageListItem( MessageItemEntity messageItemEntity, Function() action) { + final int index = state.itemDataList.value.indexOf(messageItemEntity); + + // 查找当前消息在其所属日期分组中的位置 + Map> grouped = _groupMessagesByDate(); + bool isLastInGroupSimple = false; + + // 确定当前消息属于哪个日期分组 + for (var entry in grouped.entries) { + int messageIndex = entry.value.indexWhere((msg) => msg.id == messageItemEntity.id); + if (messageIndex != -1) { + // 如果是该分组的最后一条消息 + isLastInGroupSimple = messageIndex == entry.value.length - 1; + break; + } + } + return GestureDetector( - onTap: action, - child: Container( - height: 90.h, - width: 1.sw, - margin: EdgeInsets.only(bottom: 2.h), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10.w), - ), - child: Container( - width: 1.sw, - margin: EdgeInsets.only(left: 20.w, right: 20.w), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - children: [ - if (messageItemEntity.readAt! == 0) + onTap: () { + // 如果是多选模式,切换选中状态 + if (_showCheckboxes.value) { + _selectedItems[index] = !_selectedItems[index]; + setState(() {}); + } else { + // 否则跳转到详情页 + action(); + } + }, + child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Container( + padding: EdgeInsets.only(left: 10), + transform: Matrix4.translationValues(0, 20, 0), + child: Column( + children: [ + Image.asset( + messageItemEntity.readAt! == 0 + ? 'images/mine/icon_message_unread.png' + : 'images/mine/icon_message_readed.png', + width: 18.w, + height: 18.h), + // 添加竖线,根据是否是分组最后一条消息来决定是否显示 + if (!isLastInGroupSimple) Container( - width: 10.w, - height: 10.w, - decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(5.w), - ), + width: 0.5, + height: 190.h, + color: AppColors.placeholderTextColor, ) - else - Container(), - if (messageItemEntity.readAt! == 0) - SizedBox(width: 5.w) - else - Container(), - Flexible( - child: Text( - messageItemEntity.data!, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 22.sp, - color: messageItemEntity.readAt! == 0 - ? AppColors.blackColor - : AppColors.placeholderTextColor), - ), + ], + )), + Expanded( + child: Slidable( + key: Key(messageItemEntity.id.toString()), // 为每个item添加唯一key + endActionPane: ActionPane( + motion: const ScrollMotion(), + children: [ + SlidableAction( + onPressed: (context) { + // 删除单条消息 + logic.deletMessageDataRequest( + messageItemEntity.id!, () { + logic.pageNo = 1; + getHttpData(); + }); + }, + backgroundColor: Colors.red, + foregroundColor: Colors.white, + icon: Icons.delete, + label: '删除', + ), + ], + ), child: Container( + width: 1.sw, + margin: EdgeInsets.all(20.h), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10.w), ), - ], - ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - // Image.asset('images/mine/icon_mine_gatewaySignal_strong.png', width: 40.w, height: 40.w,), - // SizedBox(width: 10.w,), - Text( - DateTool().dateToYMDHNString( - messageItemEntity.createdAt!.toString()), - style: TextStyle( - fontSize: 18.sp, - color: messageItemEntity.readAt! == 0 - ? AppColors.blackColor - : AppColors.placeholderTextColor)), - ], - ), - SizedBox(width: 20.h), - ], - ), - ), - ), - ); + child: Container( + width: 1.sw, + margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 8.h, bottom: 12.h), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox(height: 4.h), + Row( + children: [ + Flexible( + child: Text( + // 调用请求标题 + '远程开门请求', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 22.sp, + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor), + ), + ), + ], + ), + SizedBox(height: 4.h), + Wrap( + children: [ + // if (messageItemEntity.readAt! == 0) + // Container( + // width: 10.w, + // height: 10.w, + // decoration: BoxDecoration( + // color: Colors.red, + // borderRadius: BorderRadius.circular(5.w), + // ), + // ) + // else + // Container(), + // if (messageItemEntity.readAt! == 0) + // SizedBox(width: 5.w) + // else + // Container(), + Container( + margin: EdgeInsets.only(top: 4.h), + child: Text( + DateTool().dateToHnString(messageItemEntity.createdAt!.toString()), + style: TextStyle( + fontSize: 18.sp, + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor, + ), + ), + ), + Container( + width: 1, + height: 10, + margin: EdgeInsets.only(left: 5.w, right: 5.w, top: 8.h), + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor, + ), + Container(transform: Matrix4.translationValues(0, -18, 0), + child: Text(' ${messageItemEntity.data!}', + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 18.sp, + color: messageItemEntity.readAt! == 0 + ? AppColors.blackColor + : AppColors.placeholderTextColor, + ), + )), + Container(child: GestureDetector( + child: Text('点击查看', style: TextStyle(fontWeight: FontWeight.w500, fontSize: 18.sp, color: AppColors.mainColor),), + ),alignment: Alignment.centerRight,) + ], + ), + // SizedBox(height: 5.h), + // Row( + // mainAxisAlignment: MainAxisAlignment.start, + // children: [ + // // Image.asset('images/mine/icon_mine_gatewaySignal_strong.png', width: 40.w, height: 40.w,), + // // SizedBox(width: 10.w,), + // Text( + // DateTool().dateToHnString(messageItemEntity + // .createdAt! + // .toString()), + // style: TextStyle( + // fontSize: 18.sp, + // color: messageItemEntity.readAt! == 0 + // ? AppColors.blackColor + // : AppColors.placeholderTextColor)), + // ], + // ), + SizedBox(width: 20.h), + ]))))), + // 显示选中状态的复选框 + if (_showCheckboxes.value) + Checkbox( + value: _selectedItems[index], + activeColor: Colors.blue, + onChanged: (val) { + _selectedItems[index] = val!; + setState(() {}); + }, + ) + ])); } } diff --git a/lib/tools/dateTool.dart b/lib/tools/dateTool.dart index 2764b3aa..84710301 100755 --- a/lib/tools/dateTool.dart +++ b/lib/tools/dateTool.dart @@ -194,6 +194,45 @@ class DateTool { return appointmentDate; } + /// 将时间戳传化为月 + String dateToMMString(String? timestamp) { + timestamp ??= '0'; + int time = int.parse(timestamp); + if (timestamp.length == 10) { + time = time * 1000; + } + final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); + final String appointmentDate = + formatDate(nowDate, [mm]); + return appointmentDate; + } + + /// 将时间戳传化为日 + String dateToDDString(String? timestamp) { + timestamp ??= '0'; + int time = int.parse(timestamp); + if (timestamp.length == 10) { + time = time * 1000; + } + final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); + final String appointmentDate = + formatDate(nowDate, [dd]); + return appointmentDate; + } + + /// 将时间戳传化为时分 + String dateToHnString(String? timestamp) { + timestamp ??= '0'; + int time = int.parse(timestamp); + if (timestamp.length == 10) { + time = time * 1000; + } + final DateTime nowDate = DateTime.fromMillisecondsSinceEpoch(time); + final String appointmentDate = + formatDate(nowDate, [HH, ':', nn]); + return appointmentDate; + } + /// 将时间戳传化为年月日 (年-月-日 时:分) String dateIntToYMDHNString(int? time) { time ??= 0;