From d7eb734aaf8d3001f4b3199714ce66f7de4fb1be Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 17 May 2025 21:55:36 +0800 Subject: [PATCH] feat: fav topic Signed-off-by: bggRGjQaUbCoE --- assets/images/topic-header-bg.png | Bin 0 -> 39502 bytes assets/images/trending_banner.png | Bin 0 -> 132516 bytes .../widgets/dynamic_sliver_appbar_medium.dart | 176 +++++++ lib/http/api.dart | 8 + lib/http/user.dart | 81 ++- lib/main.dart | 3 +- lib/models/common/fav_type.dart | 4 +- .../dynamics/dyn_topic_top/topic_item.dart | 19 +- lib/models/fav_topic/data.dart | 17 + lib/models/fav_topic/fav_topic.dart | 26 + lib/models/fav_topic/page_info.dart | 16 + lib/models/fav_topic/topic_item.dart | 39 ++ lib/models/fav_topic/topic_list.dart | 23 + lib/models/user/fav_topic/data.dart | 17 + lib/models/user/fav_topic/page_info.dart | 16 + lib/models/user/fav_topic/topic_item.dart | 39 ++ lib/models/user/fav_topic/topic_list.dart | 23 + lib/pages/article/view.dart | 71 +-- lib/pages/bangumi/view.dart | 6 +- lib/pages/blacklist/controller.dart | 5 +- lib/pages/common/common_slide_page.dart | 131 ++--- lib/pages/dynamics_detail/view.dart | 471 +++++++++--------- lib/pages/dynamics_topic/controller.dart | 70 ++- lib/pages/dynamics_topic/view.dart | 279 ++++++++++- lib/pages/episode_panel/view.dart | 3 +- lib/pages/fan/controller.dart | 5 +- lib/pages/fav/article/controller.dart | 5 +- lib/pages/fav/article/view.dart | 17 +- lib/pages/fav/pgc/controller.dart | 5 +- lib/pages/fav/topic/controller.dart | 52 ++ lib/pages/fav/topic/view.dart | 117 +++++ lib/pages/fav/view.dart | 2 + lib/pages/fav_search/controller.dart | 5 +- lib/pages/history_search/controller.dart | 5 +- lib/pages/member/widget/user_info_card.dart | 3 +- lib/pages/member_contribute/view.dart | 1 + lib/pages/member_dynamics/controller.dart | 5 +- lib/pages/member_home/view.dart | 22 +- lib/pages/member_video/view.dart | 20 +- lib/pages/msg_feed_top/at_me/controller.dart | 5 +- .../msg_feed_top/reply_me/controller.dart | 5 +- .../msg_feed_top/sys_msg/controller.dart | 5 +- lib/pages/pgc_index/view.dart | 2 +- lib/pages/search_trending/view.dart | 14 +- lib/pages/setting/widgets/model.dart | 2 +- lib/pages/subscription/controller.dart | 5 +- lib/pages/video/pay_coins/view.dart | 71 +-- lib/pages/video/reply/controller.dart | 8 + lib/pages/video/reply/view.dart | 8 +- lib/pages/video/reply_reply/view.dart | 5 +- lib/pages/video/widgets/header_control.dart | 3 +- lib/plugin/pl_player/controller.dart | 3 +- lib/utils/app_scheme.dart | 38 +- lib/utils/storage.dart | 16 +- pubspec.yaml | 12 +- 55 files changed, 1509 insertions(+), 500 deletions(-) create mode 100644 assets/images/topic-header-bg.png create mode 100644 assets/images/trending_banner.png create mode 100644 lib/common/widgets/dynamic_sliver_appbar_medium.dart create mode 100644 lib/models/fav_topic/data.dart create mode 100644 lib/models/fav_topic/fav_topic.dart create mode 100644 lib/models/fav_topic/page_info.dart create mode 100644 lib/models/fav_topic/topic_item.dart create mode 100644 lib/models/fav_topic/topic_list.dart create mode 100644 lib/models/user/fav_topic/data.dart create mode 100644 lib/models/user/fav_topic/page_info.dart create mode 100644 lib/models/user/fav_topic/topic_item.dart create mode 100644 lib/models/user/fav_topic/topic_list.dart create mode 100644 lib/pages/fav/topic/controller.dart create mode 100644 lib/pages/fav/topic/view.dart diff --git a/assets/images/topic-header-bg.png b/assets/images/topic-header-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6070c4ab737a736f2a6ac2ebadb979aa2294888e GIT binary patch literal 39502 zcmX_mbyU>f^EZMZ-L-U=bc)210@5i+H%KYn3)0=OgrrDGmjbSIgLFuzO0&c+Ec<>w z-`^k4Irq%Woiq2o?wvC;=iGBAK~G1G2%iog0|SFdLtVuH1LLV91_tIYT&({z#Cvk- z|1oJjEhE+cxJ?{j83WkF1OEyCQL8w>I`;pj|7rgJhy!f@PqzM#CIGgHz+GcO#D9w^ zd<}FAF-WoLs3Zw-1zxg<@Nz1st7;qQWgqWhU_hHSR1}Q@*A@!QI|_vfRgsHn4u{}X zNfk$-n-x7CtIu)Kc^+jcO?IK@yJv@CtG5yX523J!SCRA*Q{HisTSFZ;clmUtlpe$P zM?O;`nsod3PMMn_~h^-PJl$1A7!niQ9bj}jN_X&_tr2rl8SE+6T2{- z<-$(@b**uBv(+4y$%}#6bI-&PWsddA=QbJtZ1hHIzkbh(>(2TIN(x?Vyr2aKT$R7w z*ik=jpUFg7AUIJEbC_S76VzVNm&^6B=$_8Zx$SK&jlDycA3>xPffVCx5%UxCjGV{v zKbHD3Ju>aBVUg7*Lju|!CT=f6X?O60g@4RcNs*`VhNhO>FxNIqldf_)UOaRoIzPw6 zD>dYYN!ZbkxtBEdS0?pHq9OTCy9Rhi1+Y8hmX6>0%pB*2xYR2~c5rL|W@+1c(sN>~ zbCYOGZ!RsA4voSZm7DCJdfXu^nt|*vdYx^El>`0GUFT(7?FxUzljT%uKpW+p=Cn3} zoO)v{X(4PGKuei%wz9{X#-2*KRb=lRzY9*yklrgX(p!Kw?_-pPi zyMANRz1_{~@SS(2OxCUIkHXj@i+2`c#&jmm-*DfQ<4aC4K1CIdm0a<*5X0m~y#f%& zW9T+5DKxX{;5nQ^Y?tIGVR#Wld}RHwgc(3}7%!aEsSeZJbmP%#Ck$E6SmFm&)ZGe? zBvxIUR=d=gL2rw;Hx(;P4=Iq`S~J4Qf3F^VP@4yFZlmW#3;fDyHHRIXzUX*= zwl_pxUXz`w$c2ZbZV@9M`Qc&= zB5`@L{!=^rKMZ>x%7VOx_r+^IMEd9LVMXEE1@?M|-|SYk&}%ZJ z*fc{?a@%)Dh{p(Kt%a$DGQKy03B%AlGld=Ux5Qjq4{t_tP&*SBkN#00sF zj$(z}jS$kjU~&MxT?(Nidw9XsQm35&rlq=IgAH3>v5s&a(lUMlB@jK(Adg12MzUZJ zrm?xEibd(y#%aFC=`LYmHMQ$(ugeC9tC9<59FVCH!3+0w-z($N^ zJwbjYk-&SryrRJmjB_ql{lhOBQ+kIMT2bQkSLO%jy|TB)leSnCZxBN((h!oNxJ$1` z{&|v~#%8Bjyx4Waz4N?1p>H_68M%~VBSP9!m73t6U?DUkF89P}+DS79OFJih?S<-n zZslp}U4~`?ErY*Kt?anh2?J6eVG zkZurUKP=?v@(ZV!0gwDd^by1kF?Cj=? z1zIw+_PK}TIIL)}?5Wo(Pe~k3M>f%N>*4#SaU73neH5ZqgX)g4E8WSLT2U6WfJ(Ev z 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 T0v2ii-yX1vj&l7=>kt12@r6X> literal 0 HcmV?d00001 diff --git a/assets/images/trending_banner.png b/assets/images/trending_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4353ec8d8cb1bb29a650771a388a86c159f8ec9b GIT binary patch literal 132516 zcmWhzcOVq*8@Dq~X569dL&yyZQT9B$WV>xwMl#Dh>&SLzCF7!0NLI2tha)Q)eT$4z zWY6M${r-Lbdf)f?JkRHOKF=q`*4mVpTa25DiHXGWAOAHY_BgKO zRK<*u756v1`dY9SbRL)NWB zH_XCzQ{zwXhwu1?{`O2gbxbQT@sY}cWKKCf}!GUSaX<){w zAK}zL=Oi)aPk0u?`_U=%7Q-QMH6-!W82`yB=%-`UzDvq!NzSQrz*1fk!!3ak7`BB8 z{f&)hT(@DEM4g5b8R$o+?!jvh@=o2uPhyi9K}DzTkN#ZtU_4A`JR&mgJUo05`_~qC z>g@YBEdSIt^(61b)>Ou-Ihv7}!MKWLkTMzeekU2ZjG~6k)C>k9@E85jy5s%L-mJ~- zyzfDgdma%x7XL08vFmjAbRpxro)5#^=QO|I-xr;t9vnwJ-usogVit6|Tl_PYa_AZN z=WgLaP8I_nvFmp4^k(=;*puUwLdH#3Mq(Z#Hfh%@`pEOnA0z+$isnsh$gzn%<89ua z;qBAw&J3HoGYJ)2&Vm1-A24<**ND|yTTMIFxhLE8TM>zS*1j`V_fC`3cdTzRcAjr| z#~oj`XJn-u`6L~>=bvWeYzHPE_}xEDtKIi5I&nucaG_r?K1WH#yW=l+e!t!OP_^}- zV0Y!s&M0a9{-eF%-2FWAmZi@|-_uQV7sgz}4kqCzt$2H>Xtm_==Fi_JK~eLW<=d~w zKVu&4(Wj3JGQK~I`_}qoy}9rBmhTqEf2$(r2Qhi+$J4c_2kVtt2eS*O&)Sc~kL8A# zSXeyGjr4DX&DIv_`eAQMP$ygu1$MK8Ch;U;SqCL@qA)9Eni`uZ@14o~Jn^nH#0h|S zQ}qIgT5YHz@zrs@eJ_&sxKAeW!_LD2xYq|=Yy9HQ!*^GFj~2DQXPEx7@Bg)U;v#v+ zQdOjyF`1ag6XZ1a%kShx&BvUykH%jQl%L&yaiJQ{E@<%m*VPv{Y=R*p)^NFNI&NP( z!ZAD0L5jL@bY`i3g@B7U+xqYCtc8e7MW2w!tA&VblH;P8mwz)_PCF*9VrvTM1y!dF z$7wTDk{4+2+S=L-{=4aRUGIESTnUZc&FsK59L*cJ*J-gSs)jiUR$*PnFJ-jw|cNj0EJWTIO`5h)a5o)Y$~E>awHl+V-UzI;r4on9T+^ z6~`V|+fqk*=`gwC|C;N14r$A4dF299-%7W4FiKe#^Xh5ekg#(XhfYYqAtr$%XXbEA_g~_{cMk;C&-T%U&XoD2OgR&GsqeAGufI$`|_W-5xRo#Fu*HWd8a|1M-Cn%4@sbh&K|%D@b5hgAWKfM0*SR zat{JMIYo*2kChJNYA(5lM}##!vIGYJo8HLRNxb}hR%6V6D;(&*?NnKX9b5>-o0uk? zUPI60u-NJt`p)=(o&jKYQ6Sl%`YtCJi?DR11agG;0|hz$dxJk~UI}f7aESw)$@ZZp zgA4Vr`N{&jnX(9oakrdXz9kd5_ZF0pzWojYVULj8PDszIuO9(V>xr|eA5h1xT^<-j z7S}~-I-@oH{ga`!UEEJ)KsmfDx0CY$_;_e`EkX}$-s@OI)&sP?#Aibd5I%T|QCfeQ zFSUtPW|9e8K1>LXB+d>e+VnFSPC1xt|-MJ8}FbkrvWr9tMk(Kp0zd!<7$xeY*(Ls zDlfi(jk+n#7Yxlj{PwF?9h0p_93Q0jk$MJ5gpNzn10+ew1#zKxBj>Abq{P`WEfKsR zjJZH{wk%mB^GVwl2W{I=pTF>4Kr~hNVle$k5n^jDlO7A%iv8kEd%L^p~LQh z@p#pH87k`Iyy+vBnQuv?7awK;$zGI!k&gh*MWrha?#yW#Z%#L{kl;Kleim#}nU#k6 z@B3wfRr10LU%@ z-*$I4HRy$S61eWYm_-I*7XLCyYSHSQ=`<@JBHD~nRg?D~#v)h$T^%BiT*CSH!6ip4 zU}gLItLmcP*vwglnENz6T2K*v5Hz-7E3d!U#(@5pO^*EM4z6W+lR-zl)i&3Ydhf0s)LI6OU|F$#?mAuv`z~V$Y9B;al*;qHwRhmngjN6^H*$ zxnY+HAvYsIB1OVcDaK<{1p`2W%~sWm405E`xv|TTh?_%5sr=+iN7c8^K=CVH@<@*0 zTj2__G{AoYoUjJisNG+|M~PO~@SO$qaG{Hh`!-hHpe7el6ve!F~nI6nYn=dfg2T6&$e~QHjWWM0n`xJ6_<_V-7^DS1icO|9OX*^S5%e` z8es~@3jWt;#%?%LgqdP)AZFU-hw1oan$B!Bch%xUFzcakI4Pa zByg6A2f-@!5rRL`TugxAdQYi$TY5Yh`Z3VFphHzz2%&VpB&+s~ylBOvPm&j(a@k{* zGOP;E_=$Apt)?#8uVWRV6aw+(gNKzF#gM6qA!NP@WgQn)*U!EwuMMAVL*b9Tb;YUj zFA!Zu5p&JLPN->TrGiE%kiShAK0wN=vXQky8#|h4=cUx=@DpI1nBGsqlI$hhE22J8 zTwE$FIwO?1MSR-MOVK0soAncA!M3v0!yXb5 z{9_>?%tLJM97HoG86^Pg%~iUlUR5H1|7kfNyC|41234UXWv#3%-`v@;=YGDFTu&`~ zmgC@h4D#?-!Ojib6_L!^mGimtI9ujCC*v{x@YSjb1xc?xZrlA!EkUrtJY}Dlw&Xwu zNh#f215a6Q@k;y8|x!UMOWx-}P(Z#i>Tk_`6+BZtqmm5l4QY zj1|*0T@MpeIVeZE;a&ZYKO0nL#h?mx3O))#)j#PeA12ETZGy0^3w*F{CM&7L={ z(Pv$FWD-03zfZqb&v1Hupmj^+(vJXs zu%Rgohiq_pSrCx~Ga%mYrdWVE1nnEO+=dhHRaPeT-g74&eUJXSqDqdwU9ekDJOa9a z!pN-mw6qLU)L$+Uzpzm;Qg~XjYHs5~4S?COsjiZ+GfdtwwrH_kGhW4JtFCQptYvz` zrMr!diBB41`_B6idFJ*(-uQYxoH{$lU|DYb(sGk`%4}U+OtBTls{-LhEG!sT8 zJyJ-rCtwF&0)Mp%LhH1x*u>5tgni$-v%s$3OH{ojOLf|s_xM)}Zf^A?ClMfKXNFUq z8)a;trP&$1b>a~bG%$sO1xz~!r-?5BA&=JT8tE4U&pD- z;XGlh*x4sOQclHiH| zLeej48+WqxFvNO$=3Y)}LSA6wk5coyO1@{nDKYgBs+qf*VcT63?(w?mw_P<8W-6(f zu@tF_0x!i5Ww@g**<7tRk2EkkMkG+CKA0Vsn}?cw1?9FX0pmxfb9?Rk`;t}cjzuk> zW&X8b%_*eT@ezwl&V{;r3MrYX%N^`+KzCGvhZ5;TV_ydWhliW5Jx|1}35gMX?-7HX zSN5Kn^WCsFsf1oJ{4cyWx}QEeq<0(F2VA*yMJQyf8xZs<67DG@)+hC>AP{aCty&Bn z^tNqqS1viWuTOF5RNh=(sCq=ICSTf(230tI-PY|$Ng0eaUmTzGVjuNbv`1J5Zu?oU z?49Nw>5IZShQ}?>+NN_DwH0bImMv<%y$53lxZp90=7q80cn+$Ffl+~xKM9}g(?-Ld%;WpWza!x+R;^e;Uo4LQ<6xPK;f5#reurXp z^?;Gl`r{)QNK4uHD<5}v9~qyHXE27#hKKmF5DiRd5DVT{s_MQaiyd)7D~B&w%#Dc>n@d9slMbEtOx!&LI9i8Z)M z{D}Nnm-k1lt#tm>1RdlJT73H}JP3b@$_br}i!?6lwb;SSaqBNLt zD+_&x(=9+1JQr(;UuZdl@@r7kvv}qPp3u2gV^u+qBdbC&Q^?W%z@lt4d3CVm! z&++Gd_Vx993@aVVITYpL^N^7O5!I>v%dj8$Uvy5BE-XbLbA7H~WWt1Ox`G_;6f9w- z;^|ychIBTZc4ezS#D|yHyT|jZY|oGsjeKCq=1>`a+x*$+hh!+j`)EdSCnrH`XO;86 zbUJ_Um>Bsf6x`4AF@g;Bb?k6%jZNuUvd+LKE?Iw+GOUM!#0T%wVh|>`S6Fyed4put z9O@jD8s}$T<;KL~6NUiATgB@iKBasGWPf05qIOumrt`;Y1j2_Tdc4Cl5Sx9+?X07-_)_zf zhy#H&y`&g`K!vh@Fif)a=Ac`B?j_kcr6|r8&D&-3fH9HFeR*Sg#|aSw5?uc7 z>;k%`jYot@VFhLW<~^$Be1%XhG6MV>Odq;vR*|p?FPJU|t4)wV16k!sMu54vm@TQx z{GaRV6)BamHRX7Yk%SynWRw*C5M3(C%L8XiuZsSxE`1;F{Sd6!TkSzP7{kg9XnJON^<^x?9Z>Yun~S(jlwEc5cY}-WJ|e&Q&&m!^4KCd}M6sm4u0(|^l?3aC{{F?22?noc}efwD#r zX1`!3%XLoV02amMHofenctnOkKh(PfG|wRcqCw|TkieKmx2^1cSkFka#`8sXt~gD1 zC$t|Ax#@lCt^cq>I(bmUB>`hAsHX}GoF z8w2it`X{!~f;0h`Ap>@xVnuS|B>Y1FtfTNXITVZLhGz?zJRsCO@%h&2Q@9J`0tFHl z`e7>mZ8$W{r4bUMf^nVF9YNdH9m_i8>muk?Zp6P;Q5Ah+of7V=7%aLEBu(KXYhThm z!kWVPlpq}2KIXXs9=7OTUTQ(GAaxT_bw@A2ICFfeVkL-QchH})9lGB!Wu*`Nl%qKL zEn7U@a^ZQVnVg)Pz<{y$OYcWUPe!Gzg#{%OD;CsjlL!05D>4sRjSQ5;mR+AK3YUH@ zB<~d8oBHxcFoWz2_q%ha{LeDk+3)e6n;HlR*#4f?6IbDub5^o8ZE@#_H6O3mC>84T zS!Yg%gD;hLU0~&?Sg}xUs;ySmdECYG+y$Jf-+RqZJ7z%B{bnzgT3q#dC_lv%N~zVb zi7z8h!SbNNlt$u-ExkAe_H6yB6p^&q;q&vq-0sNW39J_UE=TjpXbQOp5o$?l(m3Ax zZkcxQ;5*I!W5@2tH(pSeWuD~KfWP7vef2*KE{bAuy)F%q;1>pfu*J`!^hW%u9lwJG z$J?*DtKLG2s~^ZN4cP+j&+cd+%_mf>lZNktremPqlyo8RGO)diGzqXuKkv(-O?h_8)J#5cEo3p&%q%01mc;_ z0C3K&tq`jfA!V}b?bavpmPUi;RLO#GMe4bf45zMeC@91cZDkdL^c=nj9xZQnw;a5^ zHVQjT^IstP3K9U=+S@Lg3o&xrSIgcD^n&;+RN&|!R>VA_-JBxj0~z$zN=`8|{V)o4 zS8pl9QeHq_U#!(DdTd0Vh|ovJg2rozB`Rqscse=Jro@E4mIlhUn$)^#>5O@-ITHHz z#+dUXawIFv@KZwP9lAu6X1H#?)*|y}H?z>?3d~=neFJGuV?p*WganP@9S5U~m8!AhnD(rppm^u5gr~V%_Q`_hy}~G&fo0>7psTAS z3eI38lL!nb$+`3g6r*Lb9er0p{1Vm@Uz8pHoET-vjk>kLYV;T`- z@?dYNxl`ixv|6j2<1>!{W~Zt?c&#~%gTZ5tigcKsnc zVX|tKJk~Hwgi?H_QeUl&(RnR<@LO=6#H6iG5!s(K^$(xubnd%Kt1Ndpx{&9+8j>%n zU5qU-0p7RV=5_(I^Vp=FPcWwf<(%Is?1>nH{6KJmf!Lb*VfmY%ua?|JJZo{BOch9Y z1#acqRc}A^H4GF}#LC|As7%vRJABo$o*22=?3H6fiJP`4EpftMM$r`8&6?zSF zTJ(%LY_q}@7UbG>(|#AA7bS%x55MvH*CbfIrY3XktXS*_Q^JB(;23Oa|8&Ip_yY?( zlBnpAtUrK!B!X#hZO8>R{!3)Jc=j~ayGp9EO0smtuWi?|Dq|tDjW26%0Ib#5+S^wY zBhw{|A^O0Wo|iWT4>>VIKi?pjsU;4*^f@CRkZU9>W}4kgcp*kU5%5khGsOwUN^KzI z5q(M~vUSgTJTK|3<#VP{P()b7LAieal~h#*cY5>6z{PGv7oyK2YdRxqF)= zl?{g+I18=S#s?LtyTHJWfDrQ!s`-W>8L6D)6kc6>4MewykjYErbqIJpfIXRO^e<)j z&Azry+L~A^q<34B<72k?Bu@rAns!SD|AFO7d%RLDt?BzyE!n5{(E6Y}BjRNy?^!Tc zP7$c6LpPX-O#J=ef`%e1(uB6#>-nk1Q(UqVpd>XB46XzSxR_)Ww|>bnaUraEE?1(q z`If7Spn0zj19cvwa<*3QaDTq2s&2W+JhAn0h(?N|3uCmUUu*84_kwx$F*ivl^{RqC zL|;{ncUZeibpgK)P#rAxmPR$Ap1-5QEQW7$KvKjmiX=-5-EhDMG|~o~Zi@S7<(#__ zwu8QGc`nE~#JcHs4VGx|a+K9(V_ac)CcNG_uj|&$t(!xaz(k%<(7SArbEWh5^~kY` zrE_&^gG^%ENCwkCf{KH;fEMG|zR|<-U#Q>3H=wkah-xeaPq65d;vmBAUSu|0-O3m^ z&ZiJk8Ym6nn0a#z`y!lec8-$b*MVE04s0nJ$>XEzBKLX?{0e@r=#K=!CP%u=j za|CqpKm;b2bdETY40QSiaP!qai!*MWfhCgw{%_L0r|7>I_Tt<{K zSy_ji)muCc0|D!y;Rk54PDfCS^pDkD*zL$iD z9^m8_d*zitajP5I-Tdr+b#I#I@)dt=7cE~bi52~JUS9S6Ezf{hE_)NMCgKh9gPcX6 zA)(+*vh>_bkh1V~B2uZ1pB0T3SiNe8>2VsOYgj$K>8zRCnog}jRbKzrL`jL5@@QPx z(778yr>i4UZ|_@v>3)A^<`dGgu&G6$SL_IeF-cE?htKZ*k>u8}>g?ASvg-wX`)&l_ z(va<$A2rEGg9E-P)cT)>`5g02y7UrRz(E4k;(`CR``NV8ju1NmQ5Y9i$d(eDiR8KDOrd8o6`C^EOqp3m{U)49{FC zI3SPE1mG^+B)*&5>f#mr_V5|?#9Sy^o9gxgr}K!sn#(zU{ix>ILWJ5XY5(qr!o){h zRL^XX0_=~0N&QeDiq#Nd|Nt<@`GF+~>eMm-n)B-bx zasS0Fs0rZt2W9jMAtV2 z`MQ%!yBsT~&gKO+4vM-;J!HE&TXnaQo^TGiW)wgt(W_803-_X_zTmucOM4n?V!Sx4Jo?wTtK2~pb6Jo7I;$^F<&V@>x^mz1V0M9ofiY(vC)D* z1EF)Fs*PGpfLyL|DIBL>JhNEOCp=r>JffO>_*rjjeeajc*Pm_lU!JCKcmErOsFp&= z8dETMv3X;i$Zy)`md?Ke8o#DjQeIWj^H|CH14L8HJDe~P*rVT46Of&hS`6YT&by#v zjS~(7Z=ziz1J19`S5=`PJJ!CSC4gHjY(_cDwC`_IB@ULeX~hW)-8OvdT_VWU?pAS2 zCX7iAdoIy$WvKbhQn-?dUVWqvs}YRJLSC6H!DtYc;+T6^UHnqe- zz27;a`-N*{t>m7A65k+ZSl`+BfX0#fh5EF4K!x4%O~1adKwAuWC$6E({qyJJ_Huw1Q_yX73ih=5qO_1Kj>_D8 zX`ijndzMd7jnnNf?4M3;Qltz!$_NQ4Lr{X{yEZ@{8}hDruO~cdK2{eoMp;DY<59=r z7oObvO4bXO@=Col89&qsI&q^kd;~xr6u#&>qapO>N-&3|mf>uciAW`ijhOE=p6_8zD6BF02;kW@>d}fB1Frn^?sVAUCqr3%bw0$DtEbG0(3q zZ*4y<0G^7$Zs7c#hg2{Wz-*Zpb_F4e5Q(RlrYm8nh<_p5{(E17&gO2mW-wA&XxGQt zQV8ZZ{JOM7Pl^RH&rIVH3Rpq7vB+l^ieG^>Y|p~vXi7+C4XiqMEA=dNX$mgyO(fB3H@!(q z*z6y%|3=Wf*?56pK&S~-7T;#8hfu(qeG*nj6b+^%<=V&SLlIrsuJAQlMOXW?=KK`G4=@VYmE1e|H>V zkYLIuI2&nZRouAI!fMnu0@^z$1XipF(9vk9WrdieS+*ytW0~1U<(z2kH7^DeMX)K= z1ark1w=$0&!WFYsut8}P~N%z}w1Torq z1+iyYgTGiJ;MMm{Ubi83Co}&eJv!`SVT$Z}s)OQUhEgAbg#bXAKxJiBy+KzHc|XVx zlHft?J74>V^fOlP$-ip6=pftpBKWg9T=6hn0%j#mB?UfDV66WN>u*kSK99n8$lHd# zR{vwlO_=MDTJhn8Be1oY3j!Dm+VmJq7e%YcR#L@)diS3fEs_|*`lE6Fv}w-sk}%^WHmBpa9n9n(`J9e}=bA)yJmN3avhb9aZE0OrkgwkjP@$g*2@bqvlXzVtai(DdJ)Wzm~{7#-6zbK(8P0^`8)d0z0a zZj#dV4`=*9Mu0S{us(LBEB9XBs8ZEu9~sru&#@fIY2?g?leqXQ<;=gai&u$sJq7gi z@hGweT(Sx8aEQcJIRsNH>+_|pevpqkgKb@?j;2-*FC>E=#e8^qQWMoh-ZXPkz=Nf7 z-e>-s&P32F_dmpldqEU?S>O%)>fYpoAZ-i}^z{U68;PitWCtyK3A3bg?O;mLuT3VM zsJ6kuZ#4QOw(=2K@59I?{UOO&;xNnM@dJ&l@CaX-9dl<0-fjp87k<0w2$Y?Z?B66j z!*$Va1YOQ~ib$w#m>NI((CckR@LKw_W4S9v2?B;Iphc+r-_bcin14;Z9qOEQvG=3d zEDZ~4rCl62tE3?r60`!d8meW1O7AN)xY&zCz<%TZdxf;xD_zvy^|+G8sjh>kJ`)AR+M55VA1d` z$+hSoRjFsPPRFr{DS-yaV2sSh)mXANFeIhWRpjb(;9%?1PHzx9Hf077>pVouGgk>T z-aE1k=p$PO?8&fMUeB(7F`v>9x+H~QNiONhl&-s4gb!bTI>(e&YQqW*GoY2#>)sw$ z*|)0QQoCIL^0*uH(0dbUPu=%VBJ2OFwN68lumSUg_r#+9eA^dP1R{_lYJm8FlG3jl^d49(seA1A;eM0B2zMN$82BLCtL+ z1?+{B-7%2#POc1~T*VuNp@>zwy1sPeDyx(E1){RKRWDQqAUV2(G5_SIAfb42C0&G= z3_o;v&Teiq1=|mcQL-qxnpj<*->r7JTi|j;cj;+h;phXrV|no;i-TF zkhe$!E*z4Pl)%5g7KrIhs~4ofnzA%GFC)_BlI~c5xn;ma5`>y89ew}ZELgza`OwEI6kG=H8Xg8_+2T4{>#)A0Qfih8p5!`FQa0X=z2(zqb#_ zc5Fs6;{N6N>ef@~nbP`Xehq2lU3NZo zL~Zy;W&=Vzb5-Ag1fq0Z{($>^_3EDV1f*DLw2LeUIQrR5d-y;TmiZ#-^Y^NUHReOoKyQf&Bxd+Ru&M(Ewd*1mErPQ704sc=^H1xV&l>Rb}6c4*uOcMIUs(e~!Guf&V8_?TGz2TqSF5 zM2dR<1wPdgRCfB75l_)F%p7!S>T66)7mU=BA?!fDC2F_;A2}M*5oH1M3z8VKg6Ook=wR!LC`m@dmCg((NW0+l7Z0sgsr^a&{8oDf+Ognl5`6Secf z9)=rw+tFoQnviv84EEUUpnjtdq+Rtsj1w(mSBaE?7iJ0FIE=F!=$!oLFG)JMVBS9; zAsE7}&XxNxFYF0TX$I7~xALphiMcRPrZ-qKCtb*7WSqms*OHrWOUB4nC6tMh$a5Ff zn~|3Ta_lh*Je_)h1Sq&_H9*IKcqj2Uh)?VPSfG&ds&HkMZpYx?G%CFJckb0t<(;Fn z8D;DyZ!+pdaaLgxjH<8_#2rGDTgIr2^4xR>A5b^g&Gj(O z!BifzFXGk7_%nHsID6wZjn?3g0{C6QJag_TgnmXooX7P!?#s~KPv>6 zV*48lhd@V6g-J0SG~`FK@(iHHwA7s=qzIYbaEu5=jUHW6<>5 z8jH!!o}<4Cy!41iv+AlF%h4&5E`%<{F?9jgM*98-`8UBu8%6Vgtt(n29}S^fvnrQg ziFwafVrUSmErw_}3X%50mZxnR)Gc0ijTNeGVunl#*)7VF8OEJPnc!xH0A;izHPaf2 zDCCbP9)XGGgP;AWyF9S6_pgz!Zw{#>98D`?RMug=0Ou6SfRF48v;|dqF=6Xj&x&+z z{im&D7T)}Lqkh`6dhW}5TVLi3E?Me%|73!SYA!Wz=kJi+kr>zX zmQZ+sOI00^SZ<1irmY`-n}62NEpCcHu9&5i`sBfnA3IeM6aUEJn%%88NXkPVCUCpFz|1Isf zad*mPppa#h^pX&Y^Q8GqAKlZkfr*#LkCqwAhi8GadR>zAE9`iMC3c^l@Yv?WQQiQY z!;V^+b}sgkv*6ZZ)XsG!FK`DbI`NG+S(HHFQh2B5ID31-vx`#tcLHMcN}tN#I`>&Y zz!->zWAJ@9ns>!AV^x*W$3wIUd9(^^(aoXxwEUy#&#D9WUG+HhdrOPJk|Qb{C;}>Bjg`M+n#bycyNPk%S+iwL(rOS=;I(u)#K$)_K~(QnQnzJ~|1weMNp_;} zZ|T0nqr=@>52OZfRIs5VU=kZYv~aVgb3@bRxbl_{#oaF-Ebwp>;I9j}Bpb?cvqvnD z{Djr%X{Zv1lA)u^+8HWH1jQ=0CTdgz(y;E-8%ih_@NV(#`47na+^bwqY!>X;!L2f# ziM{{_W|}|LKkFqE__tE9l8c&o-#T_{N(pEDD4D>M^(9gBXr)aG-WlI~Hu~I0)f2N{ zMKW}aJqu6EkK8Gdq~5_pht2%?Of#v1@#KN3Cx!?<ul=$H#t*qeG(&i!O^>d(6`jrr35j4n12RHnuA6JJDyKP(Di^7B_M&#gMW#{VE$ z=fc1k*cf%46i9gn|m(6n7-i4zD7@c}ugK_VrM0-@G5!Y|p zxd+3O6Q2Ge@ZmxZ-g;kho0p4zu!bBUcSaE(`UQ3lId%QS#Qz)|LKV6u!$F&u^_eGT zaj1>*>x=aPE?avoRgS}r9{B3*^vRS5TJ(j`c+`3mIBKQ*UB>DjHVfvt4~bbf9h(%5 z!$}uc1xlMzNvdBB&vwRN`RdL}Ud5ZA4u2Yj_Rt?2lZ)arYCLKbVEC<h`Ek@!|d?! z%JrKaqtwuLHu?uArAvQLpM}DGj?0x8b=^Ua-x&}{ZQx?y8#*5VjvpaI-f`(*I4nn7 z3ZeJ=|038m(&KK z%C2t^X(Sc#-+7vEU!7#9HUOx7Ukc^V-7K%|V!<6Fxb+R!8XvQ{-*9U20m_F;B_`%j zD9Qhczpmu+`jkAj(k2LwI8-MgUyc_`ZwsT@WyP;IN<$uU>Lv3ltNbb&u^5uOC9GL< zwR$mOtmc?V`HWX90 zdV*g86j=GWe1s7V=uⅅXv7D*p2=s2-wSbt1Ia_mf* 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 literal 0 HcmV?d00001 diff --git a/lib/common/widgets/dynamic_sliver_appbar_medium.dart b/lib/common/widgets/dynamic_sliver_appbar_medium.dart new file mode 100644 index 00000000..2e4b03b8 --- /dev/null +++ b/lib/common/widgets/dynamic_sliver_appbar_medium.dart @@ -0,0 +1,176 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +/// https://github.com/flutter/flutter/issues/18345#issuecomment-1627644396 +class DynamicSliverAppBarMedium extends StatefulWidget { + const DynamicSliverAppBarMedium({ + this.flexibleSpace, + super.key, + this.leading, + this.automaticallyImplyLeading = true, + this.title, + this.actions, + this.bottom, + this.elevation, + this.scrolledUnderElevation, + this.shadowColor, + this.surfaceTintColor, + this.forceElevated = false, + this.backgroundColor, + this.backgroundGradient, + this.foregroundColor, + this.iconTheme, + this.actionsIconTheme, + this.primary = true, + this.centerTitle, + this.excludeHeaderSemantics = false, + this.titleSpacing, + this.collapsedHeight, + this.expandedHeight, + this.floating = false, + this.pinned = false, + this.snap = false, + this.stretch = false, + this.stretchTriggerOffset = 100.0, + this.onStretchTrigger, + this.shape, + this.toolbarHeight = kToolbarHeight, + this.leadingWidth, + this.toolbarTextStyle, + this.titleTextStyle, + this.systemOverlayStyle, + this.forceMaterialTransparency = false, + this.clipBehavior, + this.appBarClipper, + }); + + final Widget? flexibleSpace; + final Widget? leading; + final bool automaticallyImplyLeading; + final Widget? title; + final List? actions; + final PreferredSizeWidget? bottom; + final double? elevation; + final double? scrolledUnderElevation; + final Color? shadowColor; + final Color? surfaceTintColor; + final bool forceElevated; + final Color? backgroundColor; + + /// If backgroundGradient is non null, backgroundColor will be ignored + final LinearGradient? backgroundGradient; + final Color? foregroundColor; + final IconThemeData? iconTheme; + final IconThemeData? actionsIconTheme; + final bool primary; + final bool? centerTitle; + final bool excludeHeaderSemantics; + final double? titleSpacing; + final double? expandedHeight; + final double? collapsedHeight; + final bool floating; + final bool pinned; + final ShapeBorder? shape; + final double toolbarHeight; + final double? leadingWidth; + final TextStyle? toolbarTextStyle; + final TextStyle? titleTextStyle; + final SystemUiOverlayStyle? systemOverlayStyle; + final bool forceMaterialTransparency; + final Clip? clipBehavior; + final bool snap; + final bool stretch; + final double stretchTriggerOffset; + final AsyncCallback? onStretchTrigger; + final CustomClipper? appBarClipper; + + @override + State createState() => + _DynamicSliverAppBarMediumState(); +} + +class _DynamicSliverAppBarMediumState extends State { + final GlobalKey _childKey = GlobalKey(); + + // As long as the height is 0 instead of the sliver app bar a sliver to box adapter will be used + // to calculate dynamically the size for the sliver app bar + double _height = 0; + + @override + void initState() { + super.initState(); + _updateHeight(); + } + + void _updateHeight() { + // Gets the new height and updates the sliver app bar. Needs to be called after the last frame has been rebuild + // otherwise this will throw an error + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + if (_childKey.currentContext == null) return; + setState(() { + _height = (_childKey.currentContext!.findRenderObject()! as RenderBox) + .size + .height; + }); + }); + } + + @override + void didChangeDependencies() { + _height = 0; + _updateHeight(); + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + //Needed to lay out the flexibleSpace the first time, so we can calculate its intrinsic height + if (_height == 0) { + return SliverToBoxAdapter( + child: SizedBox( + key: _childKey, + child: widget.flexibleSpace ?? const SizedBox(height: kToolbarHeight), + ), + ); + } + + return SliverAppBar.medium( + leading: widget.leading, + automaticallyImplyLeading: widget.automaticallyImplyLeading, + title: widget.title, + actions: widget.actions, + bottom: widget.bottom, + elevation: widget.elevation, + scrolledUnderElevation: widget.scrolledUnderElevation, + shadowColor: widget.shadowColor, + surfaceTintColor: widget.surfaceTintColor, + forceElevated: widget.forceElevated, + backgroundColor: widget.backgroundColor, + foregroundColor: widget.foregroundColor, + iconTheme: widget.iconTheme, + actionsIconTheme: widget.actionsIconTheme, + primary: widget.primary, + centerTitle: widget.centerTitle, + excludeHeaderSemantics: widget.excludeHeaderSemantics, + titleSpacing: widget.titleSpacing, + collapsedHeight: widget.collapsedHeight, + floating: widget.floating, + pinned: widget.pinned, + snap: widget.snap, + stretch: widget.stretch, + stretchTriggerOffset: widget.stretchTriggerOffset, + onStretchTrigger: widget.onStretchTrigger, + shape: widget.shape, + toolbarHeight: widget.toolbarHeight, + expandedHeight: _height - MediaQuery.paddingOf(context).top, + leadingWidth: widget.leadingWidth, + toolbarTextStyle: widget.toolbarTextStyle, + titleTextStyle: widget.titleTextStyle, + systemOverlayStyle: widget.systemOverlayStyle, + forceMaterialTransparency: widget.forceMaterialTransparency, + clipBehavior: widget.clipBehavior, + flexibleSpace: FlexibleSpaceBar(background: widget.flexibleSpace), + ); + } +} diff --git a/lib/http/api.dart b/lib/http/api.dart index d86ea690..1460ae5c 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -847,4 +847,12 @@ class Api { '${HttpString.tUrl}/link_setting/v1/link_setting/set_push_ss'; static const String dynReserve = '/x/dynamic/feed/reserve/click'; + + static const String favTopicList = '/x/topic/web/fav/list'; + + static const String addFavTopic = '/x/topic/fav/sub/add'; + + static const String delFavTopic = '/x/topic/fav/sub/cancel'; + + static const String likeTopic = '/x/topic/like'; } diff --git a/lib/http/user.dart b/lib/http/user.dart index f57d6ff9..79c3e25c 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -5,6 +5,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/model_hot_video_item.dart'; import 'package:PiliPlus/models/user/fav_detail.dart'; import 'package:PiliPlus/models/user/fav_folder.dart'; +import 'package:PiliPlus/models/user/fav_topic/data.dart'; import 'package:PiliPlus/models/user/history.dart'; import 'package:PiliPlus/models/user/info.dart'; import 'package:PiliPlus/models/user/stat.dart'; @@ -479,13 +480,85 @@ class UserHttp { } } + static Future> favTopic({ + required int page, + }) async { + var res = await Request().get( + Api.favTopicList, + queryParameters: { + 'page_size': 24, + 'page_num': page, + 'web_location': 333.1387, + }, + ); + if (res.data['code'] == 0) { + return Success(FavTopicData.fromJson(res.data['data'])); + } else { + return Error(res.data['message']); + } + } + + static Future addFavTopic(topicId) async { + var res = await Request().post( + Api.addFavTopic, + data: { + 'topic_id': topicId, + 'csrf': Accounts.main.csrf, + }, + options: Options(contentType: Headers.formUrlEncodedContentType), + ); + if (res.data['code'] == 0) { + return {'status': true}; + } else { + return {'status': false, 'msg': res.data['message']}; + } + } + + static Future delFavTopic(topicId) async { + var res = await Request().post( + Api.delFavTopic, + data: { + 'topic_id': topicId, + 'csrf': Accounts.main.csrf, + }, + options: Options(contentType: Headers.formUrlEncodedContentType), + ); + if (res.data['code'] == 0) { + return {'status': true}; + } else { + return {'status': false, 'msg': res.data['message']}; + } + } + + static Future likeTopic(topicId, bool isLike) async { + var res = await Request().post( + Api.likeTopic, + data: { + 'action': isLike ? 'cancel_like' : 'like', + 'up_mid': Accounts.main.mid, + 'topic_id': topicId, + 'csrf': Accounts.main.csrf, + 'business': 'topic', + }, + options: Options(contentType: Headers.formUrlEncodedContentType), + ); + if (res.data['code'] == 0) { + return {'status': true}; + } else { + return {'status': false, 'msg': res.data['message']}; + } + } + static Future favArticle({ required int page, }) async { - var res = await Request().get(Api.favArticle, queryParameters: { - 'page_size': 20, - 'page': page, - }); + var res = await Request().get( + Api.favArticle, + queryParameters: { + 'page_size': 20, + 'page': page, + }, + ); if (res.data['code'] == 0) { return Success(res.data['data']); } else { diff --git a/lib/main.dart b/lib/main.dart index e581245c..93bbdebe 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -42,8 +42,7 @@ void main() async { } } } - if (GStorage.setting - .get(SettingBoxKey.horizontalScreen, defaultValue: false)) { + if (GStorage.horizontalScreen) { await SystemChrome.setPreferredOrientations( //支持竖屏与横屏 [ diff --git a/lib/models/common/fav_type.dart b/lib/models/common/fav_type.dart index 6c093683..01ed454c 100644 --- a/lib/models/common/fav_type.dart +++ b/lib/models/common/fav_type.dart @@ -1,6 +1,7 @@ import 'package:PiliPlus/pages/fav/article/view.dart'; import 'package:PiliPlus/pages/fav/note/view.dart'; import 'package:PiliPlus/pages/fav/pgc/view.dart'; +import 'package:PiliPlus/pages/fav/topic/view.dart'; import 'package:PiliPlus/pages/fav/video/view.dart'; import 'package:flutter/material.dart'; @@ -9,7 +10,8 @@ enum FavTabType { bangumi('追番', FavPgcPage(type: 1)), cinema('追剧', FavPgcPage(type: 2)), article('专栏', FavArticlePage()), - note('笔记', FavNotePage()); + note('笔记', FavNotePage()), + topic('话题', FavTopicPage()); final String title; final Widget page; diff --git a/lib/models/dynamics/dyn_topic_top/topic_item.dart b/lib/models/dynamics/dyn_topic_top/topic_item.dart index ea04fea3..822f887f 100644 --- a/lib/models/dynamics/dyn_topic_top/topic_item.dart +++ b/lib/models/dynamics/dyn_topic_top/topic_item.dart @@ -3,7 +3,8 @@ class TopicItem { String? name; int? view; int? discuss; - int? fav; + late int fav; + late int like; int? dynamics; String? jumpUrl; String? backColor; @@ -12,13 +13,16 @@ class TopicItem { String? shareUrl; int? ctime; bool? showInteractData; + bool? isFav; + bool? isLike; TopicItem({ this.id, this.name, this.view, this.discuss, - this.fav, + required this.fav, + required this.like, this.dynamics, this.jumpUrl, this.backColor, @@ -27,14 +31,17 @@ class TopicItem { this.shareUrl, this.ctime, this.showInteractData, + this.isFav, + this.isLike, }); factory TopicItem.fromJson(Map json) => TopicItem( id: json['id'] as int?, name: json['name'] as String?, - view: json['view'] as int?, - discuss: json['discuss'] as int?, - fav: json['fav'] as int?, + view: json['view'] as int? ?? 0, + discuss: json['discuss'] as int? ?? 0, + fav: json['fav'] as int? ?? 0, + like: json['like'] as int? ?? 0, dynamics: json['dynamics'] as int?, jumpUrl: json['jump_url'] as String?, backColor: json['back_color'] as String?, @@ -43,6 +50,8 @@ class TopicItem { shareUrl: json['share_url'] as String?, ctime: json['ctime'] as int?, showInteractData: json['show_interact_data'] as bool?, + isFav: json['is_fav'] as bool?, + isLike: json['is_like'] as bool?, ); Map toJson() => { diff --git a/lib/models/fav_topic/data.dart b/lib/models/fav_topic/data.dart new file mode 100644 index 00000000..5034de2b --- /dev/null +++ b/lib/models/fav_topic/data.dart @@ -0,0 +1,17 @@ +import 'package:PiliPlus/models/user/fav_topic/topic_list.dart'; + +class FavTopicData { + TopicList? topicList; + + FavTopicData({this.topicList}); + + factory FavTopicData.fromJson(Map json) => FavTopicData( + topicList: json['topic_list'] == null + ? null + : TopicList.fromJson(json['topic_list'] as Map), + ); + + Map toJson() => { + 'topic_list': topicList?.toJson(), + }; +} diff --git a/lib/models/fav_topic/fav_topic.dart b/lib/models/fav_topic/fav_topic.dart new file mode 100644 index 00000000..46d85b89 --- /dev/null +++ b/lib/models/fav_topic/fav_topic.dart @@ -0,0 +1,26 @@ +import 'package:PiliPlus/models/fav_topic/data.dart'; + +class FavTopic { + int? code; + String? message; + int? ttl; + FavTopicData? data; + + FavTopic({this.code, this.message, this.ttl, this.data}); + + factory FavTopic.fromJson(Map json) => FavTopic( + code: json['code'] as int?, + message: json['message'] as String?, + ttl: json['ttl'] as int?, + data: json['data'] == null + ? null + : FavTopicData.fromJson(json['data'] as Map), + ); + + Map toJson() => { + 'code': code, + 'message': message, + 'ttl': ttl, + 'data': data?.toJson(), + }; +} diff --git a/lib/models/fav_topic/page_info.dart b/lib/models/fav_topic/page_info.dart new file mode 100644 index 00000000..537724e6 --- /dev/null +++ b/lib/models/fav_topic/page_info.dart @@ -0,0 +1,16 @@ +class PageInfo { + int? curPageNum; + int? total; + + PageInfo({this.curPageNum, this.total}); + + factory PageInfo.fromJson(Map json) => PageInfo( + curPageNum: json['cur_page_num'] as int?, + total: json['total'] as int?, + ); + + Map toJson() => { + 'cur_page_num': curPageNum, + 'total': total, + }; +} diff --git a/lib/models/fav_topic/topic_item.dart b/lib/models/fav_topic/topic_item.dart new file mode 100644 index 00000000..85be4d5d --- /dev/null +++ b/lib/models/fav_topic/topic_item.dart @@ -0,0 +1,39 @@ +class FavTopicModel { + int? id; + String? name; + int? view; + int? discuss; + String? jumpUrl; + String? statDesc; + bool? showInteractData; + + FavTopicModel({ + this.id, + this.name, + this.view, + this.discuss, + this.jumpUrl, + this.statDesc, + this.showInteractData, + }); + + factory FavTopicModel.fromJson(Map json) => FavTopicModel( + id: json['id'] as int?, + name: json['name'] as String?, + view: json['view'] as int?, + discuss: json['discuss'] as int?, + jumpUrl: json['jump_url'] as String?, + statDesc: json['stat_desc'] as String?, + showInteractData: json['show_interact_data'] as bool?, + ); + + Map toJson() => { + 'id': id, + 'name': name, + 'view': view, + 'discuss': discuss, + 'jump_url': jumpUrl, + 'stat_desc': statDesc, + 'show_interact_data': showInteractData, + }; +} diff --git a/lib/models/fav_topic/topic_list.dart b/lib/models/fav_topic/topic_list.dart new file mode 100644 index 00000000..bb354ab4 --- /dev/null +++ b/lib/models/fav_topic/topic_list.dart @@ -0,0 +1,23 @@ +import 'package:PiliPlus/models/user/fav_topic/page_info.dart'; +import 'package:PiliPlus/models/user/fav_topic/topic_item.dart'; + +class TopicList { + List? topicItems; + PageInfo? pageInfo; + + TopicList({this.topicItems, this.pageInfo}); + + factory TopicList.fromJson(Map json) => TopicList( + topicItems: (json['topic_items'] as List?) + ?.map((e) => FavTopicModel.fromJson(e as Map)) + .toList(), + pageInfo: json['page_info'] == null + ? null + : PageInfo.fromJson(json['page_info'] as Map), + ); + + Map toJson() => { + 'topic_items': topicItems?.map((e) => e.toJson()).toList(), + 'page_info': pageInfo?.toJson(), + }; +} diff --git a/lib/models/user/fav_topic/data.dart b/lib/models/user/fav_topic/data.dart new file mode 100644 index 00000000..5034de2b --- /dev/null +++ b/lib/models/user/fav_topic/data.dart @@ -0,0 +1,17 @@ +import 'package:PiliPlus/models/user/fav_topic/topic_list.dart'; + +class FavTopicData { + TopicList? topicList; + + FavTopicData({this.topicList}); + + factory FavTopicData.fromJson(Map json) => FavTopicData( + topicList: json['topic_list'] == null + ? null + : TopicList.fromJson(json['topic_list'] as Map), + ); + + Map toJson() => { + 'topic_list': topicList?.toJson(), + }; +} diff --git a/lib/models/user/fav_topic/page_info.dart b/lib/models/user/fav_topic/page_info.dart new file mode 100644 index 00000000..537724e6 --- /dev/null +++ b/lib/models/user/fav_topic/page_info.dart @@ -0,0 +1,16 @@ +class PageInfo { + int? curPageNum; + int? total; + + PageInfo({this.curPageNum, this.total}); + + factory PageInfo.fromJson(Map json) => PageInfo( + curPageNum: json['cur_page_num'] as int?, + total: json['total'] as int?, + ); + + Map toJson() => { + 'cur_page_num': curPageNum, + 'total': total, + }; +} diff --git a/lib/models/user/fav_topic/topic_item.dart b/lib/models/user/fav_topic/topic_item.dart new file mode 100644 index 00000000..85be4d5d --- /dev/null +++ b/lib/models/user/fav_topic/topic_item.dart @@ -0,0 +1,39 @@ +class FavTopicModel { + int? id; + String? name; + int? view; + int? discuss; + String? jumpUrl; + String? statDesc; + bool? showInteractData; + + FavTopicModel({ + this.id, + this.name, + this.view, + this.discuss, + this.jumpUrl, + this.statDesc, + this.showInteractData, + }); + + factory FavTopicModel.fromJson(Map json) => FavTopicModel( + id: json['id'] as int?, + name: json['name'] as String?, + view: json['view'] as int?, + discuss: json['discuss'] as int?, + jumpUrl: json['jump_url'] as String?, + statDesc: json['stat_desc'] as String?, + showInteractData: json['show_interact_data'] as bool?, + ); + + Map toJson() => { + 'id': id, + 'name': name, + 'view': view, + 'discuss': discuss, + 'jump_url': jumpUrl, + 'stat_desc': statDesc, + 'show_interact_data': showInteractData, + }; +} diff --git a/lib/models/user/fav_topic/topic_list.dart b/lib/models/user/fav_topic/topic_list.dart new file mode 100644 index 00000000..bb354ab4 --- /dev/null +++ b/lib/models/user/fav_topic/topic_list.dart @@ -0,0 +1,23 @@ +import 'package:PiliPlus/models/user/fav_topic/page_info.dart'; +import 'package:PiliPlus/models/user/fav_topic/topic_item.dart'; + +class TopicList { + List? topicItems; + PageInfo? pageInfo; + + TopicList({this.topicItems, this.pageInfo}); + + factory TopicList.fromJson(Map json) => TopicList( + topicItems: (json['topic_items'] as List?) + ?.map((e) => FavTopicModel.fromJson(e as Map)) + .toList(), + pageInfo: json['page_info'] == null + ? null + : PageInfo.fromJson(json['page_info'] as Map), + ); + + Map toJson() => { + 'topic_items': topicItems?.map((e) => e.toJson()).toList(), + 'page_info': pageInfo?.toJson(), + }; +} diff --git a/lib/pages/article/view.dart b/lib/pages/article/view.dart index 68ad9147..0d5a9cc4 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:PiliPlus/common/skeleton/video_reply.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; +import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; @@ -51,7 +52,8 @@ class _ArticlePageState extends State ); bool _isFabVisible = true; bool? _imageStatus; - late AnimationController fabAnimationCtr; + late final AnimationController fabAnimationCtr; + late final Animation _anim; late final List _ratio = GStorage.dynamicDetailRatio; @@ -109,6 +111,13 @@ class _ArticlePageState extends State vsync: this, duration: const Duration(milliseconds: 300), ); + _anim = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(CurvedAnimation( + parent: fabAnimationCtr, + curve: Curves.easeInOut, + )); fabAnimationCtr.forward(); _articleCtr.scrollController.addListener(listener); } @@ -267,7 +276,7 @@ class _ArticlePageState extends State color: theme.dividerColor.withValues(alpha: 0.05), ), ), - _buildReplyHeader, + _buildReplyHeader(theme), Obx(() => _buildReplyList( theme, _articleCtr.loadingState.value)), ], @@ -319,7 +328,7 @@ class _ArticlePageState extends State controller: _articleCtr.scrollController, physics: const AlwaysScrollableScrollPhysics(), slivers: [ - _buildReplyHeader, + _buildReplyHeader(theme), Obx(() => _buildReplyList( theme, _articleCtr.loadingState.value)), ], @@ -606,29 +615,35 @@ class _ArticlePageState extends State }; } - Widget get _buildReplyHeader { - return SliverToBoxAdapter( - child: Container( - height: 45, - padding: const EdgeInsets.only(left: 12, right: 6), - child: Row( - children: [ - const Text('回复'), - const Spacer(), - SizedBox( - height: 35, - child: TextButton.icon( - onPressed: () => _articleCtr.queryBySort(), - icon: const Icon(Icons.sort, size: 16), - label: Obx( - () => Text( - _articleCtr.sortType.value.label, - style: const TextStyle(fontSize: 13), + Widget _buildReplyHeader(ThemeData theme) { + return SliverPersistentHeader( + pinned: true, + delegate: CustomSliverPersistentHeaderDelegate( + extent: 40, + bgColor: theme.colorScheme.surface, + child: Container( + height: 45, + padding: const EdgeInsets.only(left: 12, right: 6), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Obx(() => Text( + '${_articleCtr.count.value == -1 ? 0 : Utils.numFormat(_articleCtr.count.value)}条回复')), + SizedBox( + height: 35, + child: TextButton.icon( + onPressed: () => _articleCtr.queryBySort(), + icon: const Icon(Icons.sort, size: 16), + label: Obx( + () => Text( + _articleCtr.sortType.value.label, + style: const TextStyle(fontSize: 13), + ), ), ), - ), - ) - ], + ) + ], + ), ), ), ); @@ -768,13 +783,7 @@ class _ArticlePageState extends State bottom: 0, right: 0, child: SlideTransition( - position: Tween( - begin: const Offset(0, 1), - end: Offset.zero, - ).animate(CurvedAnimation( - parent: fabAnimationCtr, - curve: Curves.easeInOut, - )), + position: _anim, child: Builder( builder: (context) { Widget button() => FloatingActionButton( diff --git a/lib/pages/bangumi/view.dart b/lib/pages/bangumi/view.dart index 36c3611b..e8352763 100644 --- a/lib/pages/bangumi/view.dart +++ b/lib/pages/bangumi/view.dart @@ -8,6 +8,7 @@ import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/bangumi/list.dart'; import 'package:PiliPlus/models/bangumi/pgc_timeline/result.dart'; +import 'package:PiliPlus/models/common/fav_type.dart'; import 'package:PiliPlus/models/common/home_tab_type.dart'; import 'package:PiliPlus/pages/bangumi/controller.dart'; import 'package:PiliPlus/pages/bangumi/widgets/bangumi_card_v.dart'; @@ -375,8 +376,9 @@ class _BangumiPageState extends CommonPageState onTap: () { Get.toNamed( '/fav', - arguments: - widget.tabType == HomeTabType.bangumi ? 1 : 2, + arguments: widget.tabType == HomeTabType.bangumi + ? FavTabType.bangumi.index + : FavTabType.cinema.index, ); }, child: Padding( diff --git a/lib/pages/blacklist/controller.dart b/lib/pages/blacklist/controller.dart index 13fd6d65..44279f4b 100644 --- a/lib/pages/blacklist/controller.dart +++ b/lib/pages/blacklist/controller.dart @@ -45,9 +45,10 @@ class BlackListController onConfirm: () async { var result = await VideoHttp.relationMod(mid: mid, act: 6, reSrc: 11); if (result['status']) { - loadingState.value.data!.removeAt(index); + loadingState + ..value.data!.removeAt(index) + ..refresh(); total.value -= 1; - loadingState.refresh(); SmartDialog.showToast('操作成功'); } }, diff --git a/lib/pages/common/common_slide_page.dart b/lib/pages/common/common_slide_page.dart index 9b94b8f5..0c5cbb9b 100644 --- a/lib/pages/common/common_slide_page.dart +++ b/lib/pages/common/common_slide_page.dart @@ -8,21 +8,41 @@ abstract class CommonSlidePage extends StatefulWidget { final bool? enableSlide; } -abstract class CommonSlidePageState - extends State { +abstract class CommonSlidePageState extends State + with TickerProviderStateMixin { Offset? downPos; bool? isSliding; - late double padding = 0.0; - late final enableSlide = - widget.enableSlide != false && GStorage.slideDismissReplyPage; + late final bool enableSlide; + AnimationController? _animController; + Animation? _anim; + + @override + void initState() { + super.initState(); + enableSlide = widget.enableSlide != false && GStorage.slideDismissReplyPage; + if (enableSlide) { + _animController = AnimationController( + vsync: this, + reverseDuration: const Duration(milliseconds: 500), + ); + _anim = Tween(begin: Offset.zero, end: const Offset(0, 1)) + .animate(_animController!); + } + } + + @override + void dispose() { + _animController?.dispose(); + super.dispose(); + } @override Widget build(BuildContext context) { final theme = Theme.of(context); return enableSlide - ? Padding( - padding: EdgeInsets.only(top: padding), + ? SlideTransition( + position: _anim!, child: buildPage(theme), ) : buildPage(theme); @@ -32,61 +52,60 @@ abstract class CommonSlidePageState Widget buildList(ThemeData theme) => throw UnimplementedError(); - Widget slideList(ThemeData theme, [Widget? buildList]) => GestureDetector( - onPanDown: (event) { - if (event.localPosition.dx > 30) { - isSliding = false; - } else { - downPos = event.localPosition; - } - }, - onPanUpdate: (event) { - if (isSliding == false) { - return; - } else if (isSliding == null) { - if (downPos != null) { - Offset cumulativeDelta = event.localPosition - downPos!; - if (cumulativeDelta.dx.abs() >= cumulativeDelta.dy.abs()) { - isSliding = true; - setState(() { - padding = event.localPosition.dx.abs(); - }); + Widget slideList(ThemeData theme, [Widget? buildList]) => LayoutBuilder( + builder: (_, constrains) { + final maxWidth = constrains.maxWidth; + + void onDismiss() { + if (isSliding == true) { + if (_animController!.value * maxWidth >= 100) { + Get.back(); } else { - isSliding = false; + _animController!.reverse(); } } - } else if (isSliding == true) { - setState(() { - padding = event.localPosition.dx.abs(); - }); + downPos = null; + isSliding = null; } - }, - onPanCancel: () { - if (isSliding == true) { - if (padding >= 100) { - Get.back(); - } else { - setState(() { - padding = 0; - }); + + void onPan(Offset localPosition) { + if (isSliding == false) { + return; + } else if (isSliding == null) { + if (downPos != null) { + Offset cumulativeDelta = localPosition - downPos!; + if (cumulativeDelta.dx.abs() >= cumulativeDelta.dy.abs()) { + isSliding = true; + _animController!.value = localPosition.dx.abs() / maxWidth; + } else { + isSliding = false; + } + } + } else if (isSliding == true) { + _animController!.value = localPosition.dx.abs() / maxWidth; } } - downPos = null; - isSliding = null; + + return GestureDetector( + onPanDown: (details) { + if (details.localPosition.dx > 30) { + isSliding = false; + } else { + downPos = details.localPosition; + } + }, + onPanStart: (details) { + onPan(details.localPosition); + }, + onPanUpdate: (details) { + onPan(details.localPosition); + }, + onPanCancel: onDismiss, + onPanEnd: (_) { + onDismiss(); + }, + child: buildList ?? this.buildList(theme), + ); }, - onPanEnd: (event) { - if (isSliding == true) { - if (padding >= 100) { - Get.back(); - } else { - setState(() { - padding = 0; - }); - } - } - downPos = null; - isSliding = null; - }, - child: buildList ?? this.buildList(theme), ); } diff --git a/lib/pages/dynamics_detail/view.dart b/lib/pages/dynamics_detail/view.dart index 4bdd653b..a645230c 100644 --- a/lib/pages/dynamics_detail/view.dart +++ b/lib/pages/dynamics_detail/view.dart @@ -40,7 +40,8 @@ class DynamicDetailPage extends StatefulWidget { class _DynamicDetailPageState extends State with TickerProviderStateMixin { late DynamicDetailController _dynamicDetailController; - AnimationController? _fabAnimationCtr; + late final AnimationController _fabAnimationCtr; + late final Animation _anim; final RxBool _visibleTitle = false.obs; // 回复类型 late int replyType; @@ -109,7 +110,14 @@ class _DynamicDetailPageState extends State vsync: this, duration: const Duration(milliseconds: 300), ); - _fabAnimationCtr?.forward(); + _anim = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(CurvedAnimation( + parent: _fabAnimationCtr, + curve: Curves.easeInOut, + )); + _fabAnimationCtr.forward(); _dynamicDetailController.scrollController.addListener(listener); } @@ -264,21 +272,20 @@ class _DynamicDetailPageState extends State void _showFab() { if (!_isFabVisible) { _isFabVisible = true; - _fabAnimationCtr?.forward(); + _fabAnimationCtr.forward(); } } void _hideFab() { if (_isFabVisible) { _isFabVisible = false; - _fabAnimationCtr?.reverse(); + _fabAnimationCtr.reverse(); } } @override void dispose() { - _fabAnimationCtr?.dispose(); - _fabAnimationCtr = null; + _fabAnimationCtr.dispose(); _dynamicDetailController.scrollController.removeListener(listener); super.dispose(); } @@ -454,161 +461,110 @@ class _DynamicDetailPageState extends State } }, ), - if (_fabAnimationCtr != null) - Positioned( - left: 0, - right: 0, - bottom: 0, - child: SlideTransition( - position: Tween( - begin: const Offset(0, 1), - end: Offset.zero, - ).animate(CurvedAnimation( - parent: _fabAnimationCtr!, - curve: Curves.easeInOut, - )), - child: Builder( - builder: (context) { - Widget button() => FloatingActionButton( - heroTag: null, - onPressed: () { - feedBack(); - _dynamicDetailController.onReply( - context, - oid: _dynamicDetailController.oid, - replyType: ReplyType.values[replyType], - ); - }, - tooltip: '评论动态', - child: const Icon(Icons.reply), - ); - return _dynamicDetailController.showDynActionBar.not - ? Align( - alignment: Alignment.bottomRight, - child: Padding( - padding: EdgeInsets.only( - right: 14, - bottom: - MediaQuery.paddingOf(context).bottom + 14, - ), + Positioned( + left: 0, + right: 0, + bottom: 0, + child: SlideTransition( + position: _anim, + child: Builder( + builder: (context) { + Widget button() => FloatingActionButton( + heroTag: null, + onPressed: () { + feedBack(); + _dynamicDetailController.onReply( + context, + oid: _dynamicDetailController.oid, + replyType: ReplyType.values[replyType], + ); + }, + tooltip: '评论动态', + child: const Icon(Icons.reply), + ); + return _dynamicDetailController.showDynActionBar.not + ? Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only( + right: 14, + bottom: MediaQuery.paddingOf(context).bottom + 14, + ), + child: button(), + ), + ) + : Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding( + padding: + const EdgeInsets.only(right: 14, bottom: 14), child: button(), ), - ) - : Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Padding( - padding: const EdgeInsets.only( - right: 14, bottom: 14), - child: button(), - ), - Container( - decoration: BoxDecoration( - color: theme.colorScheme.surface, - border: Border( - top: BorderSide( - color: theme.colorScheme.outline - .withValues(alpha: 0.08), - ), + Container( + decoration: BoxDecoration( + color: theme.colorScheme.surface, + border: Border( + top: BorderSide( + color: theme.colorScheme.outline + .withValues(alpha: 0.08), ), ), - padding: EdgeInsets.only( - bottom: - MediaQuery.paddingOf(context).bottom), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - Expanded( - child: Builder( - builder: (btnContext) => - TextButton.icon( - onPressed: () { - showModalBottomSheet( - context: context, - isScrollControlled: true, - useSafeArea: true, - builder: (context) => RepostPanel( - item: _dynamicDetailController - .item, - callback: () { - int count = - _dynamicDetailController - .item - .modules - .moduleStat - ?.forward - ?.count ?? - 0; - _dynamicDetailController - .item - .modules - .moduleStat ??= - ModuleStatModel(); - _dynamicDetailController - .item - .modules - .moduleStat - ?.forward ??= - DynamicStat(); - _dynamicDetailController - .item - .modules - .moduleStat! - .forward! - .count = count + 1; - if (btnContext.mounted) { - (btnContext as Element?) - ?.markNeedsBuild(); - } - }, - ), - ); - }, - icon: Icon( - FontAwesomeIcons.shareFromSquare, - size: 16, - color: theme.colorScheme.outline, - semanticLabel: "转发", - ), - style: TextButton.styleFrom( - padding: const EdgeInsets.fromLTRB( - 15, 0, 15, 0), - foregroundColor: - theme.colorScheme.outline, - ), - label: Text( - _dynamicDetailController - .item - .modules - .moduleStat - ?.forward - ?.count != - null - ? Utils.numFormat( - _dynamicDetailController - .item - .modules - .moduleStat! - .forward! - .count) - : '转发', - ), - ), - ), - ), - Expanded( - child: TextButton.icon( + ), + padding: EdgeInsets.only( + bottom: MediaQuery.paddingOf(context).bottom), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Expanded( + child: Builder( + builder: (btnContext) => TextButton.icon( onPressed: () { - Utils.shareText( - '${HttpString.dynamicShareBaseUrl}/${_dynamicDetailController.item.idStr}'); + showModalBottomSheet( + context: context, + isScrollControlled: true, + useSafeArea: true, + builder: (context) => RepostPanel( + item: + _dynamicDetailController.item, + callback: () { + int count = + _dynamicDetailController + .item + .modules + .moduleStat + ?.forward + ?.count ?? + 0; + _dynamicDetailController.item + .modules.moduleStat ??= + ModuleStatModel(); + _dynamicDetailController + .item + .modules + .moduleStat + ?.forward ??= DynamicStat(); + _dynamicDetailController + .item + .modules + .moduleStat! + .forward! + .count = count + 1; + if (btnContext.mounted) { + (btnContext as Element?) + ?.markNeedsBuild(); + } + }, + ), + ); }, icon: Icon( - FontAwesomeIcons.shareNodes, + FontAwesomeIcons.shareFromSquare, size: 16, color: theme.colorScheme.outline, - semanticLabel: "分享", + semanticLabel: "转发", ), style: TextButton.styleFrom( padding: const EdgeInsets.fromLTRB( @@ -616,109 +572,146 @@ class _DynamicDetailPageState extends State foregroundColor: theme.colorScheme.outline, ), - label: const Text('分享'), + label: Text( + _dynamicDetailController + .item + .modules + .moduleStat + ?.forward + ?.count != + null + ? Utils.numFormat( + _dynamicDetailController + .item + .modules + .moduleStat! + .forward! + .count) + : '转发', + ), ), ), - Expanded( - child: Builder( - builder: (context) => TextButton.icon( - onPressed: () => - RequestUtils.onLikeDynamic( - _dynamicDetailController.item, - () { - if (context.mounted) { - (context as Element?) - ?.markNeedsBuild(); - } - }, - ), - icon: Icon( - _dynamicDetailController - .item - .modules - .moduleStat - ?.like - ?.status == - true - ? FontAwesomeIcons.solidThumbsUp - : FontAwesomeIcons.thumbsUp, - size: 16, - color: _dynamicDetailController - .item - .modules - .moduleStat - ?.like - ?.status == - true - ? theme.colorScheme.primary - : theme.colorScheme.outline, - semanticLabel: - _dynamicDetailController - .item - .modules - .moduleStat - ?.like - ?.status == - true - ? "已赞" - : "点赞", - ), - style: TextButton.styleFrom( - padding: const EdgeInsets.fromLTRB( - 15, 0, 15, 0), - foregroundColor: - theme.colorScheme.outline, - ), - label: AnimatedSwitcher( - duration: const Duration( - milliseconds: 400), - transitionBuilder: (Widget child, - Animation animation) { - return ScaleTransition( - scale: animation, - child: child); - }, - child: Text( + ), + Expanded( + child: TextButton.icon( + onPressed: () { + Utils.shareText( + '${HttpString.dynamicShareBaseUrl}/${_dynamicDetailController.item.idStr}'); + }, + icon: Icon( + FontAwesomeIcons.shareNodes, + size: 16, + color: theme.colorScheme.outline, + semanticLabel: "分享", + ), + style: TextButton.styleFrom( + padding: const EdgeInsets.fromLTRB( + 15, 0, 15, 0), + foregroundColor: + theme.colorScheme.outline, + ), + label: const Text('分享'), + ), + ), + Expanded( + child: Builder( + builder: (context) => TextButton.icon( + onPressed: () => + RequestUtils.onLikeDynamic( + _dynamicDetailController.item, + () { + if (context.mounted) { + (context as Element?) + ?.markNeedsBuild(); + } + }, + ), + icon: Icon( + _dynamicDetailController + .item + .modules + .moduleStat + ?.like + ?.status == + true + ? FontAwesomeIcons.solidThumbsUp + : FontAwesomeIcons.thumbsUp, + size: 16, + color: _dynamicDetailController + .item + .modules + .moduleStat + ?.like + ?.status == + true + ? theme.colorScheme.primary + : theme.colorScheme.outline, + semanticLabel: _dynamicDetailController .item .modules .moduleStat ?.like - ?.count != - null - ? Utils.numFormat( - _dynamicDetailController + ?.status == + true + ? "已赞" + : "点赞", + ), + style: TextButton.styleFrom( + padding: const EdgeInsets.fromLTRB( + 15, 0, 15, 0), + foregroundColor: + theme.colorScheme.outline, + ), + label: AnimatedSwitcher( + duration: + const Duration(milliseconds: 400), + transitionBuilder: (Widget child, + Animation animation) { + return ScaleTransition( + scale: animation, child: child); + }, + child: Text( + _dynamicDetailController + .item + .modules + .moduleStat + ?.like + ?.count != + null + ? Utils.numFormat( + _dynamicDetailController + .item + .modules + .moduleStat! + .like! + .count) + : '点赞', + style: TextStyle( + color: _dynamicDetailController .item .modules - .moduleStat! - .like! - .count) - : '点赞', - style: TextStyle( - color: _dynamicDetailController - .item - .modules - .moduleStat - ?.like - ?.status == - true - ? theme.colorScheme.primary - : theme.colorScheme.outline, - ), + .moduleStat + ?.like + ?.status == + true + ? theme.colorScheme.primary + : theme.colorScheme.outline, ), ), ), ), ), - ], - ), + ), + ], ), - ], - ); - }, - ), + ), + ], + ); + }, ), ), + ), ], ); @@ -739,7 +732,7 @@ class _DynamicDetailPageState extends State return ScaleTransition(scale: animation, child: child); }, child: Text( - '${_dynamicDetailController.count.value != -1 ? _dynamicDetailController.count.value : 0}条回复', + '${_dynamicDetailController.count.value == -1 ? 0 : Utils.numFormat(_dynamicDetailController.count.value)}条回复', key: ValueKey(_dynamicDetailController.count.value), ), ), diff --git a/lib/pages/dynamics_topic/controller.dart b/lib/pages/dynamics_topic/controller.dart index 7933d7bc..d5ffe2d6 100644 --- a/lib/pages/dynamics_topic/controller.dart +++ b/lib/pages/dynamics_topic/controller.dart @@ -1,35 +1,47 @@ import 'package:PiliPlus/http/dynamics.dart'; import 'package:PiliPlus/http/loading_state.dart'; +import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/models/dynamics/dyn_topic_feed/item.dart'; import 'package:PiliPlus/models/dynamics/dyn_topic_feed/topic_card_list.dart'; import 'package:PiliPlus/models/dynamics/dyn_topic_feed/topic_sort_by_conf.dart'; +import 'package:PiliPlus/models/dynamics/dyn_topic_top/top_details.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/utils/extension.dart'; +import 'package:PiliPlus/utils/storage.dart' show Accounts; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; class DynTopicController extends CommonListController { final topicId = Get.parameters['id']!; - final topicName = Get.parameters['name']!; + String topicName = Get.parameters['name'] ?? ''; int sortBy = 0; String offset = ''; Rx topicSortByConf = Rx(null); // top - // Rx> topState = - // LoadingState.loading().obs; + final isLogin = Accounts.main.isLogin; + Rx isFav = Rx(null); + Rx isLike = Rx(null); + Rx> topState = + LoadingState.loading().obs; @override void onInit() { super.onInit(); - // queryTop(); + queryTop(); queryData(); } - // Future queryTop() async { - // topState.value = await DynamicsHttp.topicTop(topicId: topicId); - // } + Future queryTop() async { + topState.value = await DynamicsHttp.topicTop(topicId: topicId); + if (topState.value.isSuccess) { + topicName = topState.value.data!.topicItem!.name!; + isFav.value = topState.value.data!.topicItem!.isFav; + isLike.value = topState.value.data!.topicItem!.isLike; + } + } @override List? getDataList(TopicCardList? response) { @@ -45,14 +57,12 @@ class DynTopicController @override Future onRefresh() { offset = ''; + queryTop(); return super.onRefresh(); } @override Future onReload() { - // if (topState.value is! Success) { - // queryTop(); - // } scrollController.jumpToTop(); return super.onReload(); } @@ -69,4 +79,44 @@ class DynTopicController this.sortBy = sortBy; onReload(); } + + Future onFav() async { + if (!isLogin) { + SmartDialog.showToast('账号未登录'); + return; + } + bool isFav = this.isFav.value ?? false; + var res = isFav + ? await UserHttp.delFavTopic(topicId) + : await UserHttp.addFavTopic(topicId); + if (res['status']) { + if (isFav) { + topState.value.data!.topicItem!.fav -= 1; + } else { + topState.value.data!.topicItem!.fav += 1; + } + this.isFav.value = !isFav; + } else { + SmartDialog.showToast(res['msg']); + } + } + + Future onLike() async { + if (!isLogin) { + SmartDialog.showToast('账号未登录'); + return; + } + bool isLike = this.isLike.value ?? false; + var res = await UserHttp.likeTopic(topicId, isLike); + if (res['status']) { + if (isLike) { + topState.value.data!.topicItem!.like -= 1; + } else { + topState.value.data!.topicItem!.like += 1; + } + this.isLike.value = !isLike; + } else { + SmartDialog.showToast(res['msg']); + } + } } diff --git a/lib/pages/dynamics_topic/view.dart b/lib/pages/dynamics_topic/view.dart index 0ad68920..dd3a5947 100644 --- a/lib/pages/dynamics_topic/view.dart +++ b/lib/pages/dynamics_topic/view.dart @@ -1,16 +1,25 @@ import 'package:PiliPlus/common/constants.dart'; +import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart'; +import 'package:PiliPlus/common/widgets/dynamic_sliver_appbar_medium.dart'; +import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/http/loading_state.dart'; +import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models/dynamics/dyn_topic_feed/item.dart'; +import 'package:PiliPlus/models/dynamics/dyn_topic_top/top_details.dart'; import 'package:PiliPlus/pages/dynamics/widgets/dynamic_panel.dart'; import 'package:PiliPlus/pages/dynamics_tab/view.dart'; import 'package:PiliPlus/pages/dynamics_topic/controller.dart'; import 'package:PiliPlus/utils/grid.dart'; +import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; +import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:waterfall_flow/waterfall_flow.dart'; class DynTopicPage extends StatefulWidget { @@ -28,33 +37,8 @@ class _DynTopicPageState extends State { @override Widget build(BuildContext context) { + final ThemeData theme = Theme.of(context); return Scaffold( - appBar: AppBar( - title: Text(_controller.topicName), - actions: [ - Obx(() { - if (_controller.topicSortByConf.value?.allSortBy?.isNotEmpty == - true) { - return PopupMenuButton( - initialValue: _controller.sortBy, - itemBuilder: (context) { - return _controller.topicSortByConf.value!.allSortBy! - .map((e) { - return PopupMenuItem( - value: e.sortBy, - child: Text(e.sortName!), - onTap: () { - _controller.onSort(e.sortBy!); - }, - ); - }).toList(); - }, - ); - } - return const SizedBox.shrink(); - }) - ], - ), body: SafeArea( top: false, bottom: false, @@ -63,6 +47,68 @@ class _DynTopicPageState extends State { child: CustomScrollView( controller: _controller.scrollController, slivers: [ + Obx(() => _buildAppBar(theme, _controller.topState.value)), + Obx(() { + if (_controller.topicSortByConf.value?.allSortBy?.isNotEmpty == + true) { + return SliverPersistentHeader( + pinned: true, + delegate: CustomSliverPersistentHeaderDelegate( + extent: 30, + bgColor: theme.colorScheme.surface, + child: SizedBox( + height: 30, + child: Builder( + builder: (context) { + return Padding( + padding: + const EdgeInsets.only(left: 12, bottom: 6), + child: ToggleButtons( + fillColor: theme.colorScheme.secondaryContainer, + selectedColor: + theme.colorScheme.onSecondaryContainer, + constraints: const BoxConstraints( + minWidth: 54, minHeight: 24), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + borderRadius: + const BorderRadius.all(Radius.circular(25)), + onPressed: (index) { + _controller.onSort(_controller.topicSortByConf + .value!.allSortBy![index].sortBy!); + (context as Element).markNeedsBuild(); + }, + isSelected: _controller + .topicSortByConf.value!.allSortBy! + .map((e) { + return e.sortBy == _controller.sortBy; + }).toList(), + children: _controller + .topicSortByConf.value!.allSortBy! + .map((e) { + return Text( + e.sortName!, + style: const TextStyle( + fontSize: 13, + height: 1, + ), + strutStyle: const StrutStyle( + height: 1, + leading: 0, + fontSize: 13, + ), + textScaler: TextScaler.noScaling, + ); + }).toList(), + ), + ); + }, + ), + ), + ), + ); + } + return const SliverToBoxAdapter(); + }), Obx(() => _buildBody(_controller.loadingState.value)), ], ), @@ -71,6 +117,187 @@ class _DynTopicPageState extends State { ); } + Widget _buildAppBar(ThemeData theme, LoadingState topState) { + return switch (topState) { + Loading() => const SliverAppBar(), + Success(:var response) when (topState.dataOrNull != null) => + DynamicSliverAppBarMedium( + pinned: true, + title: IgnorePointer(child: Text(response!.topicItem!.name!)), + flexibleSpace: Container( + decoration: BoxDecoration( + image: DecorationImage( + image: Image.asset( + 'assets/images/topic-header-bg.png', + ).image, + filterQuality: FilterQuality.low, + fit: BoxFit.cover, + ), + ), + padding: EdgeInsets.only( + top: MediaQuery.paddingOf(context).top, + left: 12, + right: 12, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: kToolbarHeight, + alignment: Alignment.centerLeft, + margin: const EdgeInsets.only(left: 45, right: 78), + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + Get.toNamed('/member?mid=${response.topicCreator!.uid}'); + }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + NetworkImgLayer( + width: 28, + height: 28, + src: response.topicCreator!.face!, + type: ImageType.avatar, + ), + const SizedBox(width: 10), + Flexible( + child: Text( + response.topicCreator!.name!, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + Text( + ' 发起', + style: TextStyle(color: theme.colorScheme.outline), + ), + ], + ), + ), + ), + Text( + response.topicItem!.name!, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 6), + SelectableText( + response.topicItem!.description!, + style: TextStyle(color: theme.colorScheme.onSurfaceVariant), + ), + const SizedBox(height: 10), + Row( + children: [ + Text( + '${Utils.numFormat(response.topicItem!.view)}浏览 · ${Utils.numFormat(response.topicItem!.discuss)}讨论', + style: TextStyle( + fontSize: 13, + color: theme.colorScheme.outline, + ), + ), + const Spacer(), + OutlinedButton.icon( + style: OutlinedButton.styleFrom( + side: BorderSide( + width: 1, + color: + theme.colorScheme.outline.withValues(alpha: 0.2), + ), + foregroundColor: _controller.isLike.value == true + ? null + : theme.colorScheme.onSurfaceVariant, + padding: const EdgeInsets.symmetric(horizontal: 10), + visualDensity: + const VisualDensity(horizontal: -4, vertical: -4), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + onPressed: _controller.onLike, + icon: _controller.isLike.value == true + ? const Icon(FontAwesomeIcons.solidThumbsUp, size: 13) + : const Icon(FontAwesomeIcons.thumbsUp, size: 13), + label: Text( + Utils.numFormat(response.topicItem!.like), + style: const TextStyle(fontSize: 13), + textScaler: TextScaler.noScaling, + ), + ), + const SizedBox(width: 10), + OutlinedButton.icon( + style: OutlinedButton.styleFrom( + side: BorderSide( + width: 1, + color: + theme.colorScheme.outline.withValues(alpha: 0.2), + ), + foregroundColor: _controller.isFav.value == true + ? null + : theme.colorScheme.onSurfaceVariant, + padding: const EdgeInsets.symmetric(horizontal: 10), + visualDensity: + const VisualDensity(horizontal: -4, vertical: -4), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + onPressed: _controller.onFav, + icon: _controller.isFav.value == true + ? const Icon(FontAwesomeIcons.solidStar, size: 13) + : const Icon(FontAwesomeIcons.star, size: 13), + label: Text( + Utils.numFormat(response.topicItem!.fav), + style: const TextStyle(fontSize: 13), + textScaler: TextScaler.noScaling, + ), + ), + ], + ), + const SizedBox(height: 6), + ], + ), + ), + actions: [ + IconButton( + onPressed: () { + // https://www.bilibili.com/v/topic/detail?topic_id=${_controller.topicId} + Utils.shareText( + '${_controller.topicName} https://m.bilibili.com/topic-detail?topic_id=${_controller.topicId}'); + }, + icon: Icon(MdiIcons.share), + ), + PopupMenuButton( + itemBuilder: (context) { + return [ + PopupMenuItem( + onTap: _controller.onFav, + child: Text( + '${_controller.isFav.value == true ? '取消' : ''}收藏'), + ), + PopupMenuItem( + child: const Text('举报'), + onTap: () { + if (!_controller.isLogin) { + SmartDialog.showToast('账号未登录'); + return; + } + final isDark = Get.isDarkMode; + PageUtils.inAppWebview( + 'https://www.bilibili.com/h5/topic-active/topic-report?topic_id=${_controller.topicId}&topic_name=${_controller.topicName}&native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}'); + }, + ), + ]; + }, + ), + const SizedBox(width: 4), + ], + ), + _ => SliverAppBar( + pinned: true, + title: Text(_controller.topicName), + ), + }; + } + Widget _buildBody(LoadingState?> loadingState) { return switch (loadingState) { Loading() => DynamicsTabPage.dynSkeleton(dynamicsWaterfallFlow), diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 96af6da1..d4bb7372 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -74,8 +74,7 @@ class EpisodePanel extends CommonSlidePage { State createState() => _EpisodePanelState(); } -class _EpisodePanelState extends CommonSlidePageState - with SingleTickerProviderStateMixin { +class _EpisodePanelState extends CommonSlidePageState { // tab late final TabController _tabController = TabController( initialIndex: widget.initialTabIndex, diff --git a/lib/pages/fan/controller.dart b/lib/pages/fan/controller.dart index af6d6dbd..55a46c52 100644 --- a/lib/pages/fan/controller.dart +++ b/lib/pages/fan/controller.dart @@ -38,8 +38,9 @@ class FansController reSrc: 11, ); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('移除成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/fav/article/controller.dart b/lib/pages/fav/article/controller.dart index bf6eb7aa..4898da82 100644 --- a/lib/pages/fav/article/controller.dart +++ b/lib/pages/fav/article/controller.dart @@ -29,8 +29,9 @@ class FavArticleController extends CommonListController { Future onRemove(index, id) async { final res = await UserHttp.communityAction(opusId: id, action: 4); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('已取消收藏'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/fav/article/view.dart b/lib/pages/fav/article/view.dart index b4e66d7a..784c4b04 100644 --- a/lib/pages/fav/article/view.dart +++ b/lib/pages/fav/article/view.dart @@ -68,14 +68,15 @@ class _FavArticlePageState extends State item: response[index], onDelete: () { showConfirmDialog( - context: context, - title: '确定取消收藏?', - onConfirm: () { - _favArticleController.onRemove( - index, - response[index]['opus_id'], - ); - }); + context: context, + title: '确定取消收藏?', + onConfirm: () { + _favArticleController.onRemove( + index, + response[index]['opus_id'], + ); + }, + ); }, ); }, diff --git a/lib/pages/fav/pgc/controller.dart b/lib/pages/fav/pgc/controller.dart index c730cbb6..c2c70695 100644 --- a/lib/pages/fav/pgc/controller.dart +++ b/lib/pages/fav/pgc/controller.dart @@ -57,8 +57,9 @@ class FavPgcController Future bangumiDel(index, seasonId) async { var result = await VideoHttp.bangumiDel(seasonId: seasonId); if (result['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); } SmartDialog.showToast(result['msg']); } diff --git a/lib/pages/fav/topic/controller.dart b/lib/pages/fav/topic/controller.dart new file mode 100644 index 00000000..47ed4dcd --- /dev/null +++ b/lib/pages/fav/topic/controller.dart @@ -0,0 +1,52 @@ +import 'package:PiliPlus/http/loading_state.dart'; +import 'package:PiliPlus/http/user.dart'; +import 'package:PiliPlus/models/user/fav_topic/data.dart'; +import 'package:PiliPlus/models/user/fav_topic/topic_item.dart'; +import 'package:PiliPlus/pages/common/common_list_controller.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; + +class FavTopicController + extends CommonListController { + int? total; + + @override + void onInit() { + super.onInit(); + queryData(); + } + + @override + void checkIsEnd(int length) { + if (total != null && length >= total!) { + isEnd = true; + } + } + + @override + List? getDataList(FavTopicData response) { + total = response.topicList?.pageInfo?.total; + return response.topicList?.topicItems; + } + + @override + Future onRefresh() { + total = null; + return super.onRefresh(); + } + + @override + Future> customGetData() => + UserHttp.favTopic(page: page); + + Future onRemove(index, id) async { + var res = await UserHttp.delFavTopic(id); + if (res['status']) { + loadingState + ..value.data!.removeAt(index) + ..refresh(); + SmartDialog.showToast('已取消收藏'); + } else { + SmartDialog.showToast(res['msg']); + } + } +} diff --git a/lib/pages/fav/topic/view.dart b/lib/pages/fav/topic/view.dart new file mode 100644 index 00000000..1e9d1034 --- /dev/null +++ b/lib/pages/fav/topic/view.dart @@ -0,0 +1,117 @@ +import 'package:PiliPlus/common/constants.dart'; +import 'package:PiliPlus/common/widgets/dialog/dialog.dart'; +import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; +import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; +import 'package:PiliPlus/http/loading_state.dart'; +import 'package:PiliPlus/models/user/fav_topic/topic_item.dart'; +import 'package:PiliPlus/pages/fav/topic/controller.dart'; +import 'package:PiliPlus/utils/grid.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class FavTopicPage extends StatefulWidget { + const FavTopicPage({super.key}); + + @override + State createState() => _FavTopicPageState(); +} + +class _FavTopicPageState extends State + with AutomaticKeepAliveClientMixin { + final FavTopicController _controller = Get.put(FavTopicController()); + + @override + bool get wantKeepAlive => true; + + @override + Widget build(BuildContext context) { + super.build(context); + final ThemeData theme = Theme.of(context); + return refreshIndicator( + onRefresh: _controller.onRefresh, + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: EdgeInsets.only( + left: StyleString.safeSpace, + right: StyleString.safeSpace, + top: StyleString.safeSpace, + bottom: MediaQuery.paddingOf(context).bottom + 80, + ), + sliver: + Obx(() => _buildBody(theme, _controller.loadingState.value)), + ), + ], + ), + ); + } + + Widget _buildBody( + ThemeData theme, LoadingState?> loadingState) { + return switch (loadingState) { + Loading() => const SliverToBoxAdapter(child: LinearProgressIndicator()), + Success(:var response) => response?.isNotEmpty == true + ? SliverGrid( + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + mainAxisSpacing: 12, + crossAxisSpacing: 12, + maxCrossAxisExtent: Grid.smallCardWidth, + mainAxisExtent: MediaQuery.textScalerOf(context).scale(30), + ), + delegate: SliverChildBuilderDelegate( + (context, index) { + if (index == response.length - 1) { + _controller.onLoadMore(); + } + final item = response[index]; + return Material( + color: theme.colorScheme.onInverseSurface, + borderRadius: const BorderRadius.all(Radius.circular(6)), + child: InkWell( + onTap: () { + Get.toNamed( + '/dynTopic', + parameters: { + 'id': item.id!.toString(), + 'name': item.name!, + }, + ); + }, + onLongPress: () { + showConfirmDialog( + context: context, + title: '确定取消收藏?', + onConfirm: () { + _controller.onRemove(index, item.id); + }, + ); + }, + borderRadius: const BorderRadius.all(Radius.circular(6)), + child: Container( + alignment: Alignment.centerLeft, + padding: const EdgeInsets.symmetric( + horizontal: 11, vertical: 5), + child: Text( + '# ${item.name}', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 14, + color: theme.colorScheme.onSurfaceVariant, + ), + ), + ), + ), + ); + }, + childCount: response!.length, + ), + ) + : HttpError(onReload: _controller.onReload), + Error(:var errMsg) => HttpError( + errMsg: errMsg, + onReload: _controller.onReload, + ), + }; + } +} diff --git a/lib/pages/fav/view.dart b/lib/pages/fav/view.dart index 130aedbe..548664a1 100644 --- a/lib/pages/fav/view.dart +++ b/lib/pages/fav/view.dart @@ -116,6 +116,8 @@ class _FavPageState extends State with SingleTickerProviderStateMixin { ], bottom: TabBar( controller: _tabController, + isScrollable: true, + tabAlignment: TabAlignment.start, tabs: FavTabType.values.map((item) => Tab(text: item.title)).toList(), ), ), diff --git a/lib/pages/fav_search/controller.dart b/lib/pages/fav_search/controller.dart index aef3ff84..8f0185d5 100644 --- a/lib/pages/fav_search/controller.dart +++ b/lib/pages/fav_search/controller.dart @@ -45,8 +45,9 @@ class FavSearchController type: type, ); if (result['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('取消收藏'); } } diff --git a/lib/pages/history_search/controller.dart b/lib/pages/history_search/controller.dart index a02695c6..de56c168 100644 --- a/lib/pages/history_search/controller.dart +++ b/lib/pages/history_search/controller.dart @@ -27,8 +27,9 @@ class HistorySearchController var res = await UserHttp.delHistory([resKid]); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast(res['msg']); } } diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index 085b35a8..3c8831b5 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -533,7 +533,7 @@ class UserInfoCard extends StatelessWidget { children: [ // _buildHeader(context), SizedBox( - height: Get.mediaQuery.padding.bottom + 56, + height: Get.mediaQuery.padding.top + 56, ), SafeArea( top: false, @@ -548,6 +548,7 @@ class UserInfoCard extends StatelessWidget { ), child: _buildAvatar(context), ), + const SizedBox(width: 10), Expanded( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/pages/member_contribute/view.dart b/lib/pages/member_contribute/view.dart index 008e859f..a7042f2b 100644 --- a/lib/pages/member_contribute/view.dart +++ b/lib/pages/member_contribute/view.dart @@ -95,6 +95,7 @@ class _MemberContributeState extends State heroTag: widget.heroTag, mid: widget.mid, title: item.title, + isSingle: _controller.tabs == null, ), 'charging_video' => MemberVideo( type: ContributeType.charging, diff --git a/lib/pages/member_dynamics/controller.dart b/lib/pages/member_dynamics/controller.dart index 995f359a..928bf8ae 100644 --- a/lib/pages/member_dynamics/controller.dart +++ b/lib/pages/member_dynamics/controller.dart @@ -59,8 +59,9 @@ class MemberDynamicsController Future onRemove(dynamicId) async { var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId); if (res['status']) { - loadingState.value.data!.removeWhere((item) => item.idStr == dynamicId); - loadingState.refresh(); + loadingState + ..value.data!.removeWhere((item) => item.idStr == dynamicId) + ..refresh(); SmartDialog.showToast('删除成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/member_home/view.dart b/lib/pages/member_home/view.dart index e41128d5..64a5dbbb 100644 --- a/lib/pages/member_home/view.dart +++ b/lib/pages/member_home/view.dart @@ -262,17 +262,19 @@ class _MemberHomeState extends State .items!; int index1 = items.indexWhere((item) => item.param == param1); - try { - final contributeCtr = - Get.find(tag: widget.heroTag); - // contributeCtr.tabController?.animateTo(index1); - if (contributeCtr.tabController?.index != index1) { - contributeCtr.tabController?.index = index1; + if (index1 != -1) { + try { + final contributeCtr = + Get.find(tag: widget.heroTag); + // contributeCtr.tabController?.animateTo(index1); + if (contributeCtr.tabController?.index != index1) { + contributeCtr.tabController?.index = index1; + } + debugPrint('initialized'); + } catch (e) { + _ctr.contributeInitialIndex.value = index1; + debugPrint('not initialized'); } - debugPrint('initialized'); - } catch (e) { - _ctr.contributeInitialIndex.value = index1; - debugPrint('not initialized'); } } _ctr.tabController?.animateTo(index); diff --git a/lib/pages/member_video/view.dart b/lib/pages/member_video/view.dart index 265e8aa5..c945d83f 100644 --- a/lib/pages/member_video/view.dart +++ b/lib/pages/member_video/view.dart @@ -21,6 +21,7 @@ class MemberVideo extends StatefulWidget { this.seasonId, this.seriesId, this.title, + this.isSingle = false, }); final ContributeType type; @@ -29,6 +30,7 @@ class MemberVideo extends StatefulWidget { final int? seasonId; final int? seriesId; final String? title; + final bool isSingle; @override State createState() => _MemberVideoState(); @@ -109,13 +111,17 @@ class _MemberVideoState extends State Widget _buildBody( ThemeData theme, LoadingState?> loadingState) { return switch (loadingState) { - Loading() => SliverGrid( - gridDelegate: Grid.videoCardHDelegate(context), - delegate: SliverChildBuilderDelegate( - (context, index) { - return const VideoCardHSkeleton(); - }, - childCount: 10, + Loading() => SliverPadding( + padding: + widget.isSingle ? const EdgeInsets.only(top: 7) : EdgeInsets.zero, + sliver: SliverGrid( + gridDelegate: Grid.videoCardHDelegate(context), + delegate: SliverChildBuilderDelegate( + (context, index) { + return const VideoCardHSkeleton(); + }, + childCount: 10, + ), ), ), Success(:var response) => response?.isNotEmpty == true diff --git a/lib/pages/msg_feed_top/at_me/controller.dart b/lib/pages/msg_feed_top/at_me/controller.dart index 9c605ad0..2dcef05e 100644 --- a/lib/pages/msg_feed_top/at_me/controller.dart +++ b/lib/pages/msg_feed_top/at_me/controller.dart @@ -45,8 +45,9 @@ class AtMeController extends CommonListController { try { var res = await MsgHttp.delMsgfeed(2, id); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('删除成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/msg_feed_top/reply_me/controller.dart b/lib/pages/msg_feed_top/reply_me/controller.dart index 9f622611..1bd7dd54 100644 --- a/lib/pages/msg_feed_top/reply_me/controller.dart +++ b/lib/pages/msg_feed_top/reply_me/controller.dart @@ -46,8 +46,9 @@ class ReplyMeController try { var res = await MsgHttp.delMsgfeed(1, id); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('删除成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/msg_feed_top/sys_msg/controller.dart b/lib/pages/msg_feed_top/sys_msg/controller.dart index 553724cc..224f1dcc 100644 --- a/lib/pages/msg_feed_top/sys_msg/controller.dart +++ b/lib/pages/msg_feed_top/sys_msg/controller.dart @@ -43,8 +43,9 @@ class SysMsgController try { var res = await MsgHttp.delSysMsg(id); if (res['status']) { - loadingState.value.data!.removeAt(index); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('删除成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/pgc_index/view.dart b/lib/pages/pgc_index/view.dart index 9e207db6..d384e93f 100644 --- a/lib/pages/pgc_index/view.dart +++ b/lib/pages/pgc_index/view.dart @@ -205,7 +205,7 @@ class _PgcIndexPageState extends State Widget _buildList(LoadingState?> loadingState) { return switch (loadingState) { - Loading() => const HttpError(errMsg: '加载中'), + Loading() => const SliverToBoxAdapter(child: LinearProgressIndicator()), Success(:var response) => response?.isNotEmpty == true ? SliverGrid( gridDelegate: SliverGridDelegateWithExtentAndRatio( diff --git a/lib/pages/search_trending/view.dart b/lib/pages/search_trending/view.dart index b0175a67..bbe05986 100644 --- a/lib/pages/search_trending/view.dart +++ b/lib/pages/search_trending/view.dart @@ -115,18 +115,10 @@ class _SearchTrendingPageState extends State { controller: _controller.scrollController, slivers: [ SliverToBoxAdapter( - child: CachedNetworkImage( + child: Image.asset( + 'assets/images/trending_banner.png', fit: BoxFit.fitWidth, - fadeInDuration: const Duration(milliseconds: 120), - fadeOutDuration: const Duration(milliseconds: 120), - imageUrl: - 'https://activity.hdslb.com/blackboard/activity59158/img/hot_banner.fbb081df.png', - placeholder: (context, url) { - return AspectRatio( - aspectRatio: 1125 / 528, - child: Image.asset('assets/images/loading.png'), - ); - }, + filterQuality: FilterQuality.low, ), ), Obx(() => diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index ca3ec014..ea646c1c 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -132,7 +132,7 @@ List get styleSettings => [ subtitle: '启用横屏布局与逻辑,平板、折叠屏等可开启;建议全屏方向设为【不改变当前方向】', leading: const Icon(Icons.phonelink_outlined), setKey: SettingBoxKey.horizontalScreen, - defaultVal: false, + defaultVal: GStorage.horizontalScreen, onChanged: (value) { if (value) { autoScreen(); diff --git a/lib/pages/subscription/controller.dart b/lib/pages/subscription/controller.dart index d3b8bff5..bfa12327 100644 --- a/lib/pages/subscription/controller.dart +++ b/lib/pages/subscription/controller.dart @@ -49,8 +49,9 @@ class SubController var res = await UserHttp.cancelSub( id: subFolderItem.id!, type: subFolderItem.type!); if (res['status']) { - loadingState.value.data!.remove(subFolderItem); - loadingState.refresh(); + loadingState + ..value.data!.remove(subFolderItem) + ..refresh(); SmartDialog.showToast('取消订阅成功'); } else { SmartDialog.showToast(res['msg']); diff --git a/lib/pages/video/pay_coins/view.dart b/lib/pages/video/pay_coins/view.dart index 6ec82c5e..dcd584cf 100644 --- a/lib/pages/video/pay_coins/view.dart +++ b/lib/pages/video/pay_coins/view.dart @@ -107,11 +107,16 @@ class _PayCoinsPageState extends State : 'assets/images/paycoins/ic_22_gun_sister.png'; } - late AnimationController _slide22Controller; - late AnimationController _scale22Controller; - late AnimationController _coinSlideController; - late AnimationController _coinFadeController; - late AnimationController _boxAnimController; + late final AnimationController _slide22Controller; + late final Animation _slide22Anim; + late final AnimationController _scale22Controller; + late final Animation _scale22Anim; + late final AnimationController _coinSlideController; + late final Animation _coinSlideAnim; + late final AnimationController _coinFadeController; + late final Animation _coinFadeAnim; + late final AnimationController _boxAnimController; + late final Animation _boxAnim; final List _images = const [ 'assets/images/paycoins/ic_thunder_1.png', @@ -129,22 +134,45 @@ class _PayCoinsPageState extends State vsync: this, duration: const Duration(milliseconds: 50), ); + _slide22Anim = _slide22Controller.drive( + Tween( + begin: Offset.zero, + end: const Offset(0.0, -0.2), + ), + ); _scale22Controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 50), ); + _scale22Anim = _scale22Controller.drive( + Tween(begin: 1, end: 1.1), + ); _coinSlideController = AnimationController( vsync: this, duration: const Duration(milliseconds: 200), ); + _coinSlideAnim = _coinSlideController.drive( + Tween( + begin: Offset.zero, + end: const Offset(0.0, -2), + ), + ); _coinFadeController = AnimationController( vsync: this, duration: const Duration(milliseconds: 100), ); + _coinFadeAnim = + Tween(begin: 1, end: 0).animate(_coinFadeController); _boxAnimController = AnimationController( vsync: this, duration: const Duration(milliseconds: 50), ); + _boxAnim = _boxAnimController.drive( + Tween( + begin: Offset.zero, + end: const Offset(0.0, -0.2), + ), + ); _scale(); } @@ -273,31 +301,15 @@ class _PayCoinsPageState extends State alignment: Alignment.center, children: [ SlideTransition( - position: - _boxAnimController.drive( - Tween( - begin: Offset.zero, - end: - const Offset(0.0, -0.2), - ), - ), + position: _boxAnim, child: Image.asset( 'assets/images/paycoins/ic_pay_coins_box.png', ), ), SlideTransition( - position: - _coinSlideController.drive( - Tween( - begin: Offset.zero, - end: const Offset(0.0, -2), - ), - ), + position: _coinSlideAnim, child: FadeTransition( - opacity: Tween( - begin: 1, end: 0) - .animate( - _coinFadeController), + opacity: _coinFadeAnim, child: Image.asset( height: 35 + (factor * 15), width: 35 + (factor * 15), @@ -357,16 +369,9 @@ class _PayCoinsPageState extends State onPanUpdate: _canPay ? (e) => _handlePanUpdate(e, true) : null, child: ScaleTransition( - scale: _scale22Controller.drive( - Tween(begin: 1, end: 1.1), - ), + scale: _scale22Anim, child: SlideTransition( - position: _slide22Controller.drive( - Tween( - begin: Offset.zero, - end: const Offset(0.0, -0.2), - ), - ), + position: _slide22Anim, child: SizedBox( width: 110, height: 155, diff --git a/lib/pages/video/reply/controller.dart b/lib/pages/video/reply/controller.dart index 63952e52..29d0181f 100644 --- a/lib/pages/video/reply/controller.dart +++ b/lib/pages/video/reply/controller.dart @@ -21,6 +21,14 @@ class VideoReplyController extends ReplyController vsync: this, duration: const Duration(milliseconds: 100)) ..forward(); + late final anim = Tween( + begin: const Offset(0, 2), + end: Offset.zero, + ).animate(CurvedAnimation( + parent: fabAnimationCtr, + curve: Curves.easeInOut, + )); + void showFab() { if (!_isFabVisible) { _isFabVisible = true; diff --git a/lib/pages/video/reply/view.dart b/lib/pages/video/reply/view.dart index ef53464d..7f1773e7 100644 --- a/lib/pages/video/reply/view.dart +++ b/lib/pages/video/reply/view.dart @@ -167,13 +167,7 @@ class _VideoReplyPanelState extends State bottom: MediaQuery.of(context).padding.bottom + 14, right: 14, child: SlideTransition( - position: Tween( - begin: const Offset(0, 2), - end: Offset.zero, - ).animate(CurvedAnimation( - parent: _videoReplyController.fabAnimationCtr, - curve: Curves.easeInOut, - )), + position: _videoReplyController.anim, child: FloatingActionButton( heroTag: null, onPressed: () { diff --git a/lib/pages/video/reply_reply/view.dart b/lib/pages/video/reply_reply/view.dart index 376d20e4..989f4e21 100644 --- a/lib/pages/video/reply_reply/view.dart +++ b/lib/pages/video/reply_reply/view.dart @@ -50,8 +50,7 @@ class VideoReplyReplyPanel extends CommonSlidePage { } class _VideoReplyReplyPanelState - extends CommonSlidePageState - with TickerProviderStateMixin { + extends CommonSlidePageState { late VideoReplyReplyController _videoReplyReplyController; late final _savedReplies = {}; late final itemPositionsListener = ItemPositionsListener.create(); @@ -256,7 +255,7 @@ class _VideoReplyReplyPanelState Obx( () => _videoReplyReplyController.count.value != -1 ? Text( - '相关回复共${_videoReplyReplyController.count.value}条', + '相关回复共${Utils.numFormat(_videoReplyReplyController.count.value)}条', style: const TextStyle(fontSize: 13), ) : const SizedBox.shrink(), diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index 84f929ae..023d9ecc 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -90,8 +90,7 @@ class HeaderControlState extends State { if (videoDetailCtr.videoType != SearchType.video) { bangumiIntroController = Get.find(tag: heroTag); } - horizontalScreen = - setting.get(SettingBoxKey.horizontalScreen, defaultValue: false); + horizontalScreen = GStorage.horizontalScreen; defaultCDNService = setting.get(SettingBoxKey.CDNService, defaultValue: CDNService.backupUrl.code); } diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 3b965f79..e749607f 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -1352,8 +1352,7 @@ class PlPlayerController { late final FullScreenMode mode = FullScreenModeCode.fromCode( setting.get(SettingBoxKey.fullScreenMode, defaultValue: 0)); - late final horizontalScreen = - setting.get(SettingBoxKey.horizontalScreen, defaultValue: false); + late final horizontalScreen = GStorage.horizontalScreen; // 全屏 void triggerFullScreen({bool status = true, int duration = 500}) { diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart index 9f17da57..4a9543f6 100644 --- a/lib/utils/app_scheme.dart +++ b/lib/utils/app_scheme.dart @@ -450,6 +450,19 @@ class PiliScheme { return true; } return false; + case 'm.bilibili.com': + // bilibili://m.bilibili.com/topic-detail?topic_id=1028161&frommodule=H5&h5awaken=xxx + final id = + RegExp(r'topic_id=(\d+)').firstMatch(uri.query)?.group(1); + if (id != null) { + PageUtils.toDupNamed( + '/dynTopic', + parameters: {'id': id}, + off: off, + ); + return true; + } + return false; default: if (selfHandle.not) { debugPrint('$uri'); @@ -629,9 +642,10 @@ class PiliScheme { bool isSeason = id.startsWith('ss'); id = id.substring(2); PageUtils.viewBangumi( - seasonId: isSeason ? id : null, - epId: isSeason ? null : id, - progress: uri.queryParameters['start_progress']); + seasonId: isSeason ? id : null, + epId: isSeason ? null : id, + progress: uri.queryParameters['start_progress'], + ); return true; } launchURL(); @@ -658,7 +672,11 @@ class PiliScheme { .firstMatch(path) ?.group(1); if (id != null) { - Get.toNamed('/articleList', parameters: {'id': id}); + PageUtils.toDupNamed( + '/articleList', + parameters: {'id': id}, + off: off, + ); return true; } launchURL(); @@ -707,6 +725,18 @@ class PiliScheme { } launchURL(); return false; + case 'topic-detail': + String? id = RegExp(r'topic_id=(\d+)').firstMatch(uri.query)?.group(1); + if (id != null) { + PageUtils.toDupNamed( + '/dynTopic', + parameters: {'id': id}, + off: off, + ); + return true; + } + launchURL(); + return false; default: Map map = IdUtils.matchAvorBv(input: area?.split('?').first); if (map.isNotEmpty) { diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 46c4fada..ebeb85b9 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -37,7 +37,7 @@ import 'package:PiliPlus/utils/login_utils.dart'; import 'package:PiliPlus/utils/set_int_adapter.dart'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:flutter/material.dart'; -import 'package:get/get_navigation/src/routes/transitions_type.dart'; +import 'package:get/get.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:path_provider/path_provider.dart'; import 'package:uuid/uuid.dart'; @@ -479,6 +479,20 @@ class GStorage { static bool get optTabletNav => GStorage.setting.get(SettingBoxKey.optTabletNav, defaultValue: true); + static bool get horizontalScreen { + bool isTablet; + if (Get.context != null) { + isTablet = Get.context!.isTablet; + } else { + final view = WidgetsBinding.instance.platformDispatcher.views.first; + final screenSize = view.physicalSize / view.devicePixelRatio; + final shortestSide = min(screenSize.width.abs(), screenSize.height.abs()); + isTablet = shortestSide >= 600; + } + return GStorage.setting + .get(SettingBoxKey.horizontalScreen, defaultValue: isTablet); + } + static List get dynamicDetailRatio => List.from(setting .get(SettingBoxKey.dynamicDetailRatio, defaultValue: const [60.0, 40.0])); diff --git a/pubspec.yaml b/pubspec.yaml index b62b92f8..a3d711bf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -101,14 +101,14 @@ dependencies: encrypt: ^5.0.3 # 视频播放器 - media_kit: ^1.1.11 # Primary package. + media_kit: 1.1.11 # Primary package. # media_kit_video: ^1.2.5 # For video rendering. media_kit_video: git: url: https://github.com/bggRGjQaUbCoE/media-kit.git path: media_kit_video ref: version_1.2.5 - media_kit_libs_video: ^1.0.5 + media_kit_libs_video: 1.0.5 # 媒体通知 audio_service: ^0.18.15 @@ -208,9 +208,7 @@ dependencies: dependency_overrides: screen_brightness: ^2.0.1 - path: 1.9.1 - # mime: - # git: https://github.com/orz12/mime.git + path: ^1.9.1 mime: ^2.0.0 fading_edge_scrollview: ^4.1.1 rxdart: ^0.28.0 @@ -226,10 +224,6 @@ dev_dependencies: # rules and activating additional ones. flutter_lints: ^5.0.0 flutter_launcher_icons: ^0.14.1 - # flutter_launcher_icons: - # git: - # url: https://github.com/nvi9/flutter_launcher_icons.git - # ref: e045d40 hive_generator: ^2.0.1 build_runner: ^2.4.13 flutter_native_splash: ^2.4.3