From 20d1a38988f6d14891439473b68ddbcaa88805af Mon Sep 17 00:00:00 2001 From: YangYuhao Date: Wed, 19 Jul 2023 17:52:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0=E5=92=8Cui?= =?UTF-8?q?=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/leyuan/app/MainActivity.kt | 7 + circle_app/assets/images/base/ic_launcher.png | Bin 0 -> 19555 bytes circle_app/assets/images/base/icon_login.png | Bin 14379 -> 0 bytes circle_app/lib/app/aboutapp/logic.dart | 43 +- circle_app/lib/app/aboutapp/view.dart | 6 +- circle_app/lib/app/blacklist/view.dart | 6 +- circle_app/lib/app/call_out/logic.dart | 2 + circle_app/lib/app/circle/logic.dart | 11 +- circle_app/lib/app/dialog/UpdateDialog.dart | 226 +++++ circle_app/lib/app/friendslist/view.dart | 4 +- circle_app/lib/app/help/view.dart | 8 +- circle_app/lib/app/home/logic.dart | 29 + circle_app/lib/app/home/view.dart | 2 + circle_app/lib/app/likelist/view.dart | 16 +- circle_app/lib/app/myfeedbacklist/view.dart | 2 + circle_app/lib/app/userinfo/logic.dart | 151 ++- circle_app/lib/app/userinfo/view.dart | 369 +++---- .../app/userinfo/widgets/home_call_out.dart | 906 +++++++++--------- circle_app/lib/app/visitorlist/view.dart | 17 +- circle_app/lib/main.dart | 8 +- circle_app/lib/network/api.dart | 4 + circle_app/lib/network/dio_manager.dart | 3 + 22 files changed, 1094 insertions(+), 726 deletions(-) create mode 100644 circle_app/assets/images/base/ic_launcher.png delete mode 100644 circle_app/assets/images/base/icon_login.png create mode 100644 circle_app/lib/app/dialog/UpdateDialog.dart diff --git a/circle_app/android/app/src/main/kotlin/com/leyuan/app/MainActivity.kt b/circle_app/android/app/src/main/kotlin/com/leyuan/app/MainActivity.kt index 1a8300a..859ebb3 100644 --- a/circle_app/android/app/src/main/kotlin/com/leyuan/app/MainActivity.kt +++ b/circle_app/android/app/src/main/kotlin/com/leyuan/app/MainActivity.kt @@ -1,6 +1,13 @@ package com.leyuan.app +import android.os.Bundle +import android.os.PersistableBundle +import android.util.Log import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + Log.e("tag","11111111111") + } } diff --git a/circle_app/assets/images/base/ic_launcher.png b/circle_app/assets/images/base/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5b179e07b0dff4d2962d516240e3a03888206de3 GIT binary patch literal 19555 zcmV)>K!d-DP) zZ?^4ID-S+V(%<={ZC|T9?(QLj#BEbMVd9gs`TYTsp5#mNsncB%UwdwY2W;BLs;%z& zk&=?~zx)_GefrbARUheEM;P|I}X1ogpTCYD!F ztN)VzxEcAjjQGPlILz`p|LoVQ?H>e|-FwCB^n9a;=s*0!BJExi;_p(6-cO*3M@0nR zAKsyD{vco^iPzd<- zKH=@))snuO{}xG4KkNB#(d*t3(c)3xivA8+!bS<*#P8z0{C5?J?^emyN~zBKE=#nL zKCmS`nuH{X#*B@og@8~%3yLdl+myisbfGVt=uvTiI_*{gQ zQ-I=lO%1$*YjFo;(lrl-reRclkMeOuY0O{~pDn&$MI3LKi8677-)C*jk2)Et_ni{OEJyoYYoH4U+Buf14#@ zqM%lAZyb1x+VbzackjM4v5;)){j zEBW?J5%2M&&sao2Ns5CfgB2}u~5P~NwJibn-ejajeENjK*?>UZ4&s?!wOyh6DLkIOe-wDE}sl%9QG%9i&A19>*rM$moK&)V~ECJcfm0aHGb0pSdm$KbGwit7q}x87(xbR@h8B0a@8o?VilP3Qq_XM&{*{Z28DmY~x2 z>6p$siCMo@7~kv-06dE>6qOlRW5W53*QVg2uCV ze|XTNHn|_PN&UoY%KNkgoR)!0OcKCJaCL*HfQo@qtdwl^*xkvNNw`zlDsg<~%hr)C zsLHC|c95veIDYgDZe?=T`Ly9SUB7<)?T>?Gfd28q3oit5rBgW>yA!+xDZ#VIu=rwz zNST)ilohKZTO7Xd!evo|_)vp2%PoW-HMkcwnip9IZ)!{(TLx-S9W}NtNrFY!X8?4` zsn8N642K7UL4bIW74l$U`lP|5ZyK}&n|H}DcnrvaJN@pFmIH17EP8!_^gez+e~!M_ zqX$9Oy-y`ri4str3=~@^woVqyB*VlYk-Xb?fDb(<$^{ISh~w^nTcbAfqrc}D5p8nv z^lr;-dPe|~|H%Dh?pplS014Sx908K-uDGtl7g=Oc6kmAJ9nFEUa1|V@kVWufU~NYwqFLcDe2G=3<4DT*}Y#TJP0h0jDc|H=d%mpo;!#h3*eqJ2=1Br zk_v`En^y$)^jx?P$c8(?WSJOfvW{#O*~KyJ z{&bG)Y8&^U^W^wV&fac2L~@&Hn}(PgXuaBTn@*oT{r_y+`!7EffOhQI5&D+{WCM?4 zb;MoCMLo`NWUC|YU^e}7+~GrwakO1IfPa8OLv$CCjfE8t01 zK~L6(U6BVpN|vPn`a#s-MZ@4ab`o4>%!AXa^=PpBSu{BM2I{~68R~y^8V$bt6;7wm z!TE>ta3yI@{|@)l7vS;jd1${m2i?DZf&RnO(7*N>^ao#q{_$tvxo91_yoA; z50!u-K!ue`QLGcg)K_wI47tUmu?p&avA zzzLNr#taW%P=<$H7GG#ionsOtm%yR%{_(}fB+UogP+ya8^%8K605fX7(_ zw7(jlJ7a+UX9K+dV}Q?(74SP<4*yfv5%BdDH2mTs8lLz8{?EM&-z^8=HGdsEM^7iW zH&pz623S}o23iFYXMN(_*}btv;uwkDv7EJ8AhOht926oQT+bTG9-s&AO@M6OmMTz| zx)!2EZAaXlT)z=%a~Ba)2v@}o!C4XqwiJtaQY^#PMw34nE~6)+0YUS~p;z$m=U?KV z=YGdSS1a)FRRbQmVnDsi2GqY~K!b}0IR9P=j=LJ1UsT}yWPslf2Kb*gpyBrhH2Thf zCZ`N&`fmf8e`7%4R|W+As~kb^pGUJppQF*%SKu>uEwn?(MUty?PtOx^lLuKyj+Z#I z(~;|9%PC?c*&2yJJ2JMi+O1@q!V)=%jcl)JP4xc-Kx%N*E=z%j;~XVOj;5efPLo9~ zhVEQWx49uWh;{Fu4UZg(bB2w9$Ls}Yuxl?K`s6eG^UPU1c(n}wylxQSFf`5tiU)z= z#Xt}U4GDlIUlRxfKr>QP`nfSZ7eKH1{z#I+2~dOctqL4^fAE(^g#62Z&@YT=`MD8c zpOQW*N6XiLLGb>M&}hYO=tfL|2e~+3in)9!hGO?BEE1Oux+F`%wh|w)HIi#c7Kmh* zR@o);C*0XR50DBTZ#K~kjvVg@)6JHLEe?Z2uF8u7(B_m@>$-6*rni(nQzpfMu{*gc z_o7m0=PX2nXP+bY^gSNDa0&msCRrO7vMPSx8PVbsBig@dMDGJe6m2wN(n1p!PBLNj z2op9AW|^^em@=ba&00;qW?!^Zd}CV8%3o4a@x`$>nKw35eatg@o(}nI$7o5^>cgmMzZ4IYrK4ZEi1)Ub(%jVRt=#A1SCcZLZ^6U}%#){J*z%s4@MH`Yjs5oc^lw~EE3sS1!*anUV8bk72${%2Kg%ZDtD zA6+!=@mAs;QAMVBN6&p(a`5R+u@2w08j2^}D649)dL17A=o376@rnS4-BWwA7{gbQ zMJX}iaF0q*g!tzhh~IB328zFH%?LB{o;D$p;Ar)k1Ws#}#Zka%uYhxc!7-xa+eUPv z^NN4Nh=kYa@yJ!Q+x`if&DsKO!7ympigJ9USR>BXxQ=CUX`RG%sS=`_jfw6}fE>dk zxvln=6y1~H5&cSJ%Do5}k&;uO%vlT<@!TlZahW&`kGyge|NQwEJba}Bo)qMEI%>qC z2__s!G2^xPN=u{G+qQ~ztha2{LDCzY%y^-f8H*>Hko=Ma%*}w)`86ZD950sqnS;E`J*)si^%Po^7&T(yos5=BwlxQHR*@klC&cvONfxjF9YxgkjR zB0%1u@||J@4+YGv+evA9I|3*+9(ulD94vD$IawQDO3T@0ac#w|U@)APtimH7e1eBA zT!9;9OVQLYGiI6aEQ1qg-{`h_(?)M}AlDXq9WTcGhW$}LVRySz*dF;6o@)Dr(9>=I zMZbTIJyGA`K+G9>-|sk-ScWZwOvu?mu)K3~;B+VTJYq!Bs}y6sLXR(AN5b}hBV^`Q zcoqzoYDiom7Xfx(kuZoXEw;185?Q7Ba$p@mueBR71`)+W#Yjur>u;rd1t2k!kna-3 z>WCttb+*L;qOd&NV@^S&7nyOhu48A^DJ%~=hAF|jP||cI2KY}wH}9c{^~^zAk5q)a_eLxCWbxQe zI{+QM@{!bN4AL9U#E@odF{R}*n3(()`aX6Vv9Fh*gBqMSC2$gDaJn9|2d6j1XMGMC zkwTWN-}46a-uFA&EqMt(gC~PdlaykvR!(UFdkj>J{qg$@_6CGt~@4}J=%1WSxA2Z64X z;WcOjw|c>FtrrBBdV!?oaDIf8)=zD@a)L9-53?NCEaBslSbr1};7d zh`PatKw*ePOvK$gGDN-vR7gr1g1B2GOulJt+vA=CNQTG)5QD=~$2}t3iWhenTOZ%z zQh0KwB?rsd1#lfV74=_u1&^M&fX0+M7jH0O2W3V_x|ngabM-nLUxq!g|H1t5m(f39 z8rpcIz|Sd4K;ZO9(?2Cw=MZ@MwS!Z=X3(`rM%&eIAmPZhDqWS8#jyb=<5?rJ_8XD? z3_b3-j->TppxLM;&}J7)T_OxokG`UF){~MA?!vK4@oy%mzGnck4Vo?RL`fs|cxVH6 zO>nlsWqqzHv+3@iE&7z)CeDD<(YN6A%N2ybZ@`>sCOp@hToA!?BvB>)U8R>34cHoc z3X@vyLA-Yn{GFqrd9(#Jd^0-`ZdDqOF!+ac6F)mY8VKL$9K>w+kb+}F&A~ZP2~O@l zBl7kdk-wX?vjQpWzCq~N$DqwAmMxK-=JV*tPF+QJjuk|5W+o;Su+>)}vTc)l4j{#K zDH&Hd!^1&ytjH|5-l5|TMvi$X`*5eMOG9qVbJ<6OV;yIoydqG{52bl&j;k`Egkx~jCQ zz}X{#Q?Sd3K|75o+HOSg(-j!-*eQgLSwohnNP>uCLLPg>1xLQ=xK1SZpDBaX0w@vj z)Z1ww{r_&7Kpd>NkKUqKRG^i9PC55+r&yGuIM z!(PvKFUN|QlSpnjURWHCU+fzFHcO*zi`GLnBYFQNq!2WzFWkW5*n&e@UCA~h20v}Y z(5FaG8j!y7YXlEp43Er$%Iu6Q@^Z0}hwAD%4B(!83JU@{b{6rF0+4#zRP6*PIP4E! zO2tL6TopWQeYkF+4w}gXYsnOgj4LTc^l6E4Iwd3Ey7vWmeRC20>Eb>)(2N(89P0%k z6Lxm}4Wq+%AyCsr1jM!tdncuD(iI6yP9XIlSrCFI{lLwGQ@YiN;ZGPb;&FQ1RF1U8 zpQ6d&8E{V@C{?Z5)$>TpgdXst0NcA`7pVi5uCEx~$bE@&Jk*q|yDtxisjUDJIDbSA z9U-EBN8@_beOyw|+(DYnK>xJpQKvh~GnX=sjDgS;41wF@yWs!HZ^)vHxh>m_=X#NK zNwyI`M>>#Pfwl2pBB{v)csWJbHRhd^t4j#nJ;Ny;YL1|;|)UGQ+<+{l1ih<~Cic`|zRa7d5jk+yd4ZjmV zAcsshTb=`bNWJAp8|~{=j)fggAjY=2_Ixs?~udE$P$*@i&FqYpT!7V%II zaWjemcAS)Ok)yb7>VgODVfFno#N> zc#XV9#Vx+_N;MO;&WL zq-z)rt#73G`|9Vly7ovM^&ASfRiK!xO$mWBL?U#cZdOLoR#tQ<^rQluRZq)h>4jY;eYVYcO4)R z*z9iH+0#9MUhdAZsf5y?%R?SO32$K^40I-<9Jj%A~a z*pXqz&UDAxmS(`r&hH@1D^+wi*fy9@JqOR-Mfo>PLjUO}C5xj5hoBj|K?aAc&BVvp z;utYywFJ%#24}eh&Kw43i3#%;o3LP!2@4mPFn;Dw2rXG4O*!JMEU8~*r>n3+9qGEu zwION;UWued|4eu@Ox#Ab5+Ef|<6d{}n`svd??`!Ym@07gDTcTWn9}c9cx>r2}_gzjYz*-JIhlO2`lkv70}&AX|NhRK1m->A9BTksKzs?x@^i%1HY zDR)QMH&k`vtSBI&C$v8HamwviGepEq#E@mbSil*-&IX)S1kMTqXStEUF=F;oqi|Jf zi=%+EY_18*=a{f!Hd(2uXVA7}1>J}RvK30PvqDlV#KE-92*z3q5TBrJ-G{7C(BR>S z*{~UndF*nZG||_^V_y=d9l_dSO4)PG7CoU>9>J4!6$9Hp0ljlu2Mu&%IX~Kr;*r3+ z0FNa9hTV`m@qJ-&CduGTl`YN;6*zMkoW(}WUt}bUW5gl?X9+>Gl%QEAL$h+039DzC zux18nngN4GzXAWe(b8;LvO?CekSZhNRY8D*%E(9X&?T5M@)v9&>+|?PYi*IWd7ufCdcK1oeX?D{)Km-)r`Wd7-zm8{ zhax$9J0`9wm%v$7Jva*&7|G%os|085G!xd5HcTPwH2zma7q1rA)5;3T3rle9DTcwS zt&o(?*HVC#)LrRq=c+SB{@xVi1>_A96aP4K(B%w4|I#B^GpG!k2_T_@N^K%-BrVPS z1zkd?!u8QVKm4MmvKj*<%hf3aE|1=P>?OXBJ{R702qrGMY!A*7wZ$QD<{7bMu93ho z3UF2tG^^R#FgVi*oT(^^UkM#J%-O zM=Q6B;>Kz#KqC7h>%(i|a1bYg=Z=Y@TFOHa#JFb4yjteZ$F!o;SU<>&4USY~#+rgM z6eTCqxu35?w)JJhkZJ=qZhIkjGJ5hI=TLX=&Bk zS^|)KG8Xqm=2F*&hih=3SG+X7xl6J%Fuq?Vv{^++F5HV{#aAi*F;}WYrDDoLGEbvz zlR~=lgW#cWBL;6VC{~R_zq`7$fQwTlJnq^s5ir*z>*6YQbLTjudX2-1z?X0+{0F?z z<|0l+T*JwTGE%t^|Nd5+OL!&xXRHf4ifo_hXyMuoZZ#a3#?~vj_Xf;aRAFav6mXW$ zHe#i)I0`sMVQtjlY#A?s^CW@u)EE<<9!)TfyoU6W{m^q=h-Y^2@- z#bp@Sc`x*?ky0ZtIBKaINPdosd7gez@NLl)eRmm}q;;K~OY_bJsv^6-phMTav z)P%i539`ZG(Xrq$O6d!wV47}N$&Gcfs|ksPNTo&6?=C=AE=&N#!&Q|jI`WW>PF<|r zmo95CdKT@&vS9|S7-p6<+>GUF(Q^a4AB3N_lU*aQRdIE-jz5H3lP!>z0JF1DYSC+6 z&TWy`Y%%t9`Uyw67;vRJt*qZ?DvZ)V=iV#uy-Kv)ToaJZwYCzNB7vu^6T3_v$Z( zAT-RKfPx|KV%Z3@m6obBf9Mr-YR#F~%?}J?tD}yGY~|q;hQ2}5@Kop1c&VoWhmwpp zR!@~|Uz4@3>v^OH&V%j-?#y2ohryXIWA!wH0B8M8fTOlJ0vrkfo~2mvV37$222plb z^f?;ljTd2p2iJr+8{?XgJXVMos_-M2xGG(H08(lS>iEafb&)7a>tYp+K51egRA|8h zOc?Pq7LPXDX_2gvSsx?Nzn|U3uTC0mxMhZf?Q4p-3#5&A8Ximh0tfpVYN!ea&pFnX zZr>rHQE9bZEzb3tBfjlKEE#=PfV1gV!6}izd2WyiFBC{xQ}i<;2CWqRi=6Fhd-RpZ z3Q0vpUeT>dQeQMAuiz!^0a8lN}4~$i1Z$N;OTnfsKqbTb+k{48~*} z$Hws$cw7a}Rsv^Rb*@SU&hrdTp$RYLn{a5L35WCOJBltNama2ln}x>;@$!Cp3LV5E zT=EKNykrg!ch%QgfaK~k`(3Swf0Cs5CpA+HKj>Y07_-KeVcvMNLroiT0dY~YYg9ON zqgco;t*=6C6`~pr#F~CTU`KX^Lv7D4$EE@2FfQ&T#5Ea)=GtxqLmZlVBqFv^5r)U? z!G`{4usy5H?z4(E4)_&agC~g6gY7veVk;CEHX193oWYZ0YG`p}SEX2-7YihCUM6r} z$tC5`XN!$U9eEtuoDxy26+?x2ok(_LoX&F`#1j#@ounO#Y7an4{YM$PVTpgZ^OWKr zu9AA?jzIpXPcU{Hlr8#d=%!IK3Qc6y?q97_j$ zi{4>#;pNiS>hFuViUMFyr*I?$jluks&+tTkx!rdt8rJy$d^It4=b)C(r40sk*@nl5 zU8w|z$3ocz$9CYTEDnS7DuHt}iypJdf>HLGGwx&f=T8uQV`9iFui(a`6_t9B5=bim zHEVH~0g^iBEC7l5UP}Fkm$>EWI=!V)hkp6vF?`%lm_dGj=47*-W{`^VPQqK;0e|HL zKvqM~1WZYN9~(-_v2k#PomS=lhLrZp;N{lNF8vo}0{J(cdks4&BfS}LURJ=#mf$&_K`_zJt0{ggob)XMi{??h$x9jY z5D&R?Ro$&2GO=0$kPp`t$e&tZo|cE^g>x`w((jl)#f<4w?KNd` z1qSpx2#r%Ky9-`jY;z;An`_&=5OW58i#5Z`?X-H>bqw!w6pg*Q*umpSK4e`Ay6?kE z$`)&A^eNIhHAb^IEzIucy&x=smNhnNc$1 zELsg&E!GNJ#yxZY7X{E6`Dk6T z24kjP!qn+zp(!>RKj{h*JFkIj{pu^oHxfg@LpUtI)7_rXb{ggkJ%eRq%k8vin>6kJkQXJ>*=ti)SJN?bLz@b>0@&TSHER(>o z369m^996&}XkH&+#+&`kIGSO`x>0of=9)2V?o~vNctQlyypXyypI+)06Pv;)6=?#9 z`z`M}KvEx=0+4kDT4Z27q`_lcA&oA53S*{U#iW^Lizd#h)ToKSBPwbNTQs#KsejfuF)F>4bhn$kXNBOQwB_*ta z*0uVYkRpaCrg1)IbUloH*%$HBK%*4nA^dCZE<)ny7cp{98OF{tTWO4}!4uD*Y109Jc?RZ8jT4u!5aXtu#gutvb{aSB z9NM%Q=CC9n;IRdWfD8`G!tn9m+I^SM-0Mi}vK$_+t?j<=MslwoiZFdIqy|sHw3vO^ z-1Q?I?EN!d?sEaJ_P&TCeXrsO0kyxtjMZc5#-r<2y2Om3OG(Sj7_!uW_=$(acq<7Y zd9b}Qz^v8*#95dOkTisYMPI)M7MFTV#K_1jGk|nv_R4*Sw)ln1AqUX z)mD>lMGRzQ^f;7G{}JOCU$@iP1((q|c@5le)Zp@YxjMB#Z0ETcG5c4`cZ^d#j$3pM zQL$6t=42gH-HhBQ&hmARL{m*1T55YBQlEX#U~^17Wythk2k2_K+w^AtOGWf5h8T>0kL{Tg;d zYUxpoSbo*+yI7@*&LgL8kTs%95fJ7OSdB;p@j z-Q?Ynz2y1tjsWU3=@14jD?`Z&vqR;~q!_4C@(u4w2@c2aap4YDY6xgm58B2dh-a50Da@R}BS!Y1Z^p~N_Efv>Y4G^~rZyh0KY1F15 z+J|W7J=vv!WHwotNaJ}|z#>FXIDq^W*HJ{i+L5y7{({EA8GkBvP+XjNEF@siC@ug%Ng{0{1^0p>b!VfyzW5!eE+TI z5mUSs?pk>mZcW6H^OU0-+%$?pV#gwL&2{8#Fk2~mqom9Y2DF>@ywss;lg9Hb4c-la zcLk_b0D05N@Kk1z9x7RwRUt7$6t*J9?Lh9zt0-7wwilV-tcB+g)ON^C-MwnDRnoXy zSAW?OS?+9VBz?mK#7=x3eRf|&-)FA=b=rFw@pE2-UuZwaH$WAD@VW5_OEG@CiuWku z>(VlDCNejgkhzIq*=(&0Qre~pw4Sn8S|XV1Z|b3~WP!Y6{v(n1P7#DsroF4#acDP4rL)fX!LwIbOJ zXRf}AsQw#8oyGRzDHq%JIm^Y>w6p}wHfAe&mbp%6DlM7n&^#uiNaX zaU99jy){Bg*Q3MX^J0bhPPZuje5>jE(7eYW$%<4rg_A34klnwGtrpcp$Neru~32UBM`HUG^2yHye?$ z#VnL=qi)kagw8jPE;e0co{8F|1DslQhf{bDxVGp5XKi?mA-R#<13IGBidWG7_yt72 zarvgz{Q_*eZkLa__T&3bxeh%NkQ=u;$ z0)O7>oLv}Kpcx<*wT(!47@*oP9>_AJRm=(FHJ~eJq)JQp@{}H4i7X4+yrGDh_Zm{S zluJJQ2{Q($l)BZ7F6)1W_k<0ox8e!Zd+sReAAcWCZ+;4wH$H>r=tuC_|2jODZilA- z2)Oviz{$yR%uypz14uqZu zl_~qN$_p*jz7dJGW1^Ko^~y57+#@d*(v*7STTa=5K964$u&BisrOlg0X#P`0od?BE%DfrwSpz)JRKV-|Yw-E>9DEL*gl@=uxHgT4Q&ok<8_1cmAMez$ z2s!)>T7Gzmbh!q)gciqsgkSLjxVSr5Qm;A-=_m%OC(UWAt`6kp9)a*dPou~7awP3C z3-wfMH$k-ZI-;i>qzp`6kleCThq8jJ(vccj%Ldge(|VLOfz;D_jYlm* zk4?X!@6%?BdhIkL{B08+y=cJy84P%!+#q%z4pmY;4A_b?}A&Sj`lFz7Bz!5 zAOSH8K1BE3Ms(j}mb6z=H~BGX<2ke&x&1`R5L+KS%HFW+67c(XX1|bl!k}7)dff4_z~$-j&KNxdlMKRszJkC^wY1 z-ERJ68JZmU7+zUZs!XG+6+z$@lnCFAFQC!qzoGHhm#WrR7vZ<#7&PrtZYq9Z3Abi5 zG*`q;RiyZq_mGQh*kKsrw)~2&`^=SkMp7424+1K6(J2HCoG#|a^Xj*ii%rQp`-t(- z9RKiEP_-2xtEtWM${f5Nv>XR{4jhKCxi2D#{56~5!~{6#r}j{X3j?CG~=i8zbvlnJlr-h$7!zr*+Yi}w2N z0=$oY3{Bsm!u8pGM>SH`k+yxlx^5ZEXEklmYS?Zh?75E4&zc>o_qGaTk9-5(*`-!1 zbZ{b5xk5*6pW1A@GMO^Dko&~M%$XDOVWZmxk@&YD)x44eSZk50k!KNs!w#Sd_w zumsL}>yd^^$F0@(*|@eFK~kmYd-S3G5Viah#2+w`%#sdPiUG=BbqPuNPr)-ou0UJ$ zfysNVasaKY5mf6ISCBeYA?<;x9$ep9#6i;Ri~(Z0iOnmn$4MPP6F^@7q4UVkUklpv+q+Fas(L8$vV)k4@$LGxsmAuP@ zX(LY~G^f&i@ni;1y8@yVK-a$2Ig}O37$D063ranR-I!btlHHg`-VlT?d_Jtl>xMl;~xfy;-3Hph}>7RZwR0-4QTO&0j&t2)*l-X@j*FSYe0pj=(>2n7r_Ks#sV-EHGuY%$;h1sagq;;>N<|CGLb9>m)7l zqV&v@8{>YOfbpx*Zuc+n|H@>Ee=GsCBY=Lb1c(D@28iPyD}X*FfIc#y?FR<5d*?cu zkJ|!QZ8hBsRf()e{lpAB^vTC~@ape)=-aPRKYcKqYS>j$BXRwQu1jax6R7!MvefQJW)Gv{mW*dDAp^IVh)=zeW4li(@r2LbG*oM#Uh(>_9ZQ{sp|g{bK)bU z?Jyaj;99uIW|eNtGQdol=Hs4K2>)s8(D<$2EHRKefL2m?1t3cX_LCGqGe8{wH2+!- zpg)%YieP}=H=zA{2E@EWKkxVgJ~4UKHhh(07sOo?BK^Mc5L8!HRh)-tILf*lirt;f z_i|rdvoSl+_QmUneAVnwX}itXHS`kF(zZaGSy&l7%hhM=jaS-Pmbde56U8gm*D`?k zQSHWTm%6hQ6?v^7vO*M0dzOqt!`<)Up(_>E0klm9rUcLqGcXyTmIP4vCj`)kP)TJ6GkJkYa_h2SGP$4O~v0uMD8er1(bw#2J_hASDA60ra<0{3BBMFO&?d5};@q zpiXZZ(D9|;&@^pU^{$L(UC5&tYtr!2XKwsH282fmh;9l;@8{>_U|T9QHiJiKZv?G5 zf$*b7v_59GQ(FRP+%hv>?)^Km`#k|&Ca3P1(4}U=Kc^5r6hw<{!7V!&%8P4~{HQ&6 zo2S~hQoRKrwnDtzFBcV+nh;r`7*$Fy5AhH_yLdF*pFM^Lu9f3{r3-@t=*w~deO}7I z7$9{3ZOOpCvd+Lbfadro`dtF(Z3&=+*D4Ub=|gyj^{YO$W>>;}QdJE~lL4>{*yptx z9YJCB83`hOUrl=IU43HEX!0JkeC0Y?y=Jyk_;EA(?lR+0rU4s!zK>>^W8{@t)8I+& zOV_;*{F3{@i|ap1-xn8ms9f?+1k-X4y;w6^8Entnd*{P_=2ATR z)em@}%qE3bbz!J8FiRJP3=jvyV`86XtAHIxM!yku6TZ8Gw zj-ZgC;h!zby*PT`pOCXA9KQKW5%S`Bw0zx+&^PQAN3LtbSTl}wJBL049+P9AOlawb z^kFO1xu;}()GO4>!LyWoi43fk0;GzA)WNiR&b(N)gZszCxfWh3`_~2Pgn!g^{4^y+rLMn_#uC~;kmve`mog96ZPc9 z7&xY>rv6h^*M+lN7<9cSAn^HL5%QMVqF|LG$#qRzV8#bM44B#LF#NKHNmjgXnpj5J zmmtz{@N8L~zH;wW(I!&*F11sw1xN*vC74#MkR>CNtq^bfB!;`@LNjbUoZk8fk6bLn zqqZ5C5VEh-qUXK>ckk*~538vpOC-a< z?nha2uR1^-yzWe~nP;!DXtL{T1ifRnQlKohNJSgXIG$?6v)#TyWcn<4$XkH>X63_+ zm$OrE^Q5vqJXXsB&%Fc?TOn_;1-04=NwJVFv8QB(>VSTy=%4;gVdK&_U8wh@kZD4$V=Tyfpd{G_niY~N=kSwCaZ1>j(t?A`#lE`Z*3NbKCqmFjBVXDerq*3b@^f`-qX zM&pxaN$*>$>3e4M+;7IdVl&?FdJWV193qQTO0Fy0(&r_{{KyjrE9*W|=B27U(_=Wi zTigo((FyzUTzLXW#6otitfLrWz^+W%1|d}}gU21Mnv#)l+jkf)|G8|}2j*v!!rNtF zGC&+aGeB_`fQ;x)042R*MDN2!^m(of(c|{P!zf9Xdw`oN5a4#WT@K5xd8BMF`!6AMT^3?Bdb!VwU6-Zq zBWGSJ>%%F0L%Mlubr8)ph5#P8tpshh0X178UPFj`>cz|rW&ikoQa>489L>l{aC_x# zXwF=-28aV_xerX~!eD?nfVQOYb^){;{~R$Q`DF>9lotu2UFQ*&z67q$RgWDKP{{pX zqLyRZ3x6wW5Cqqd9?;F%3%}#%;s2ot{vVmGrxLGljeNIO3V0G;ktOcZ{ODKYPkgpVKdpfG8R(eA;k(Q5VhmQ$SXJE<=$g= zwnUuTXAFd9;w-oyc@Ns3u89EJZWN+b24+N?kByYV8|^c&Nk`+s!=a}nL=0CI9j3DDQqp$Cb*VEiwQ4OuYN-KI z7Z+8oOvfFqay%p!;& zSFHgWKmcXzH=x(@&k-Cq0&XtWRcfWyQ)N-HregTqTEZnF1s+qLg#PHy@FHvJ^_kgP zpG#uP)9V?@ZN1yagy(wwgtYX>;hi-^>@^~Ws*<&Cm^TPsJY++RHk7k2i|ewtKDKQ` zH~Am_^qJZXkS#=tE3?YV=cwK3RD2E`Lz7V>jAHwJRG7&&qQg}-r zn2`c#BO(Z(cJCW0fHqS6V^&9ev*c5>h#LiW zcit*NvNmF>&7ZM6Txg^W%cWH^G{crdyX$@EJ}!su3$sJ%37)1D^9+2_jJ+jhoajU8 zdhZ{RnXwg(ipN7ssXCWD#8hP-X&A3s`{l!3_rJ#R!B1GL|WoV`Zm?W{omrC%bv>tuL%@X8wYwVE1>rx)oW z;M_I^uBA)izWaS>-@6Fyzf916X|~9N^_3*HJQ1&%F@B{PFXfr>PG2MT_x%Ye=^Nok z8J9M@03NBzhPugO#;;h&U5&CG`;mmr!r8$K_+hsIxBQ)OUA%D@O9ihtS?Kv4ux3<1>P zZ35^`Yk-stEQJ8-F9VcC0Ob-u`MZrM++Kmq<=-K?-!kaEI^0}}&(?;aY0(`nJ%_+` z_S0~C=__bHxCr;JOmP3&Y$wgv5P+v>B=jJ1=@IFe*Fk#yW6OLp{E6=}_b_r85 zj-h4NROx1+|J5hI1X^AJF5xR|1&RGT9!Q}!FXEo*@2eV%uHjYQ>SY){ak z)UHeok(8PFko#($Uksnbp3w1lUW$!4RpkW&!~zYR;-}}ryOaPS!BN>}}kw6#B@^?@_+dgCnIKKLC@ zUtEO~#b8d~nc?*P4fLI4arFN(qs0j`a<-YVWVRXGM@V~M@P;Xev&yg~^IN25KY>Qs zqon_jrzQ7EgO0>8j|iCAZK>hm8!l4X`^(bTRa5K3qBirRYaS34doKYLR{0OA-5Fni z@F;k-?*MXjOuFOr95hl)q@|dMXB&vlS1#k{7Qt)695i|2Fv5OkXmA%O3T9m=L;D0@C2u2p;26yn#VnAQJZGhk2 zhjmZJKx(M~;#mS>tgce2=D<)6to3~NQQ+vsvkZFlg*Taa9{VD!5#6nP*XjnAzl6N8GjpP^}u@6{@0XvE=V@|=x zNFDezf^#QBpIZW5&LDUQmo-4H@gz&}PA86c;^jJzoT{s1o}0lh1c81=#G?w7iHFLF8Fj3eVzE@Ebc1p-c85=7|r{W%p0$ z{p@8*;SI>(3N!(fx3@BYRsa$KGy_ELYr;AsCNn_fzGf0YbC%iz#QVQLHeK4jn|EMl z>+|?n10EZB9`j32VQ>k7T(BBVa>r3>ULmGkq9PlvPzA|FGu)-eTZH2Cb~cV zHBz^oL-wxg$lqCkLE9=Qg*Vs*&=U!uDK-GjCx8}_`&u%WU6&CnXBfmD@T(_Z$AWQZ zFmcr97*u)`-HVfN2_V0F7of)E>zj1%1z)l>YD=VKXCm9k$VF&=5qvlv z;<$)|O1?`)^*T|Sd$07RaSwIh0aBpNF%nmC8K&$)xaSnXvtT#^hR;Uu#I=ZAcmN5j z-bB*M4>4fvDGc23D+X`8jNu!uVbt1d824BiCafyM5STv|`kcXH`nF_kvZPpzU6o>Sx+&mvm1{d}b>tLX z?Xox~RBP6$(J|yhkwLmN$At&v-s=6==NOa-+=mIxR>MLDP76+1ikwt9O zNd(y<&E*D(?_LQK50~YPh8wN-01>D%Orn2{E8CpG<(0r|&?xv8O+cg4nFt)U2rb90 zLhG^X5jAlu;^x1Aj+6Eve(HX7TXqz2bDu-|F&R9|8H&oW&TWE+)Azd`MDN_Wv*m!o z5|cQoTLGxL3t_oXVikONGdNtT7d`nLU`xIEdcNRv*XpS;0;tiva zUk(lAx$zzhkcYlKx9J@Li2lgm>EVIRn>UA~6&7C?Cv^(|iL9%Ni@~EB#q3ELA|>PC zz8-xmx%)$;{83_cd~dFiu=(d%A3R8nXMS)aF-Y7w%cCCo&gV{AUS@`^6IZu|g-V4x z1>vIipLdt$LM6K#wjiPlMUs{v(-Abh`nz}!zn4G5AM+PhL__rj&Jxp z7;KJlgsZBwIF%WeJQRb)!!aDe!%2sO>vc;~EKrl+vPaysk=&+*g@tS!ZtszjlJdXw z@IcR=J+=J@7X2un%zy1pum<8GmX7WyUj-okU3~$S)K!4Q7n=iZxo*Vci4qp ze3uKDI!i8t8(sfYRN)pDs+Z*Qc;0@Gz7kwq`DQ3&X}LPgKl5vBS-4W%jonf& zDT_)>lD<>1Gzv7r+AuhBW@T|zN}MBQoOZPxJ9zA`-z|&2&%0&BfBDh9QS&qR-(N3) z+cY*dmW{)0KmMm}+qMtVqjTS!{9}AV`rt6L-AUF!Raqd17tIzVhDZ*yEv`)zA=^tu zH@>?$PU1#mn79FXHV9=NqG1)FxUm(e1Xw*J5FCnMlg01lSVmYFc1;Wn$2GF05iW|M zk=>LfIOZ5f<*FDQH8i&q9F-^wGwXv|LgU}~J!(rAxlRAarmb(w@jscFnGeyUbC+Jd z#*y{m6S^gUZd$ewRSS|l>XEII1tuQMuK*P%0$Abhc!mf!ya>n>B^VrvUy~(U7x7u~ z9dQz*{M`(#1savL;d4^OIAZukRTk$q!lSgAXVYLf>wM;MTgJwwJj`ut)7H1;_*+0g z!2R^t;Qo5`8d4O0nomd<93}2hj={MzR!4~1iadr%Pmh{_ra#~JfB)B%+tSC!=K*e8 zo3_3!2mg_Ov})DLg&y?{JoQCdBH03wME9MOBdeqUrG`ljl)5A!L>3}KZhQr<>ZH6+ zu`bH@2w<$^8U^S(7T;7S86N)Gqfv9z(|C^HHoWhVN4PCHfWBh@aj^C9gAYEaqsK__lFQ_86k;x?PG;S zO5%M)trX?pIa$hQSjzV(-z)zeFKIP+>+`WaR|o&&Z4f6pqFvbXFgz|g{UUC=`yPBy z&uuBU=^X)x5B8O8@|^Fx|9*dZY+m0(Kf=9Xlb^Lsf)tScdePm=gP?r5+r#!X)qAWZ zy9l*);#EqO*h%g7gxG4x7R!;u>#FzjGB)b(vUN?i*5*!H9F;g==C+}r`OKs4y0P45 za@#q}ZFxuHALS5k>^_NHck-i6=rQQ;4?ft|N$0h~&9Bi%nt&!}iS%-h#zAI}CPAjZ zLR>YqeXho88eD}!s#Y@xvVD(5w%;qu_B`&S=-O)=2bObNaGNyHdaa~3;+jv8+-B}_ z8{RSZr9PNg4yNmqJmp|4@E`y9M+;KR2OfC1qLF0#e4VNkwLvPk z1+_^lZX0eRxvf0qw&OOuqt-_`m{?I%yiYn2?fv)PAJCwICh(z$9tx)4gJqcNbeF|# z!EM5A!)?TECAS&39k<~fw?4|DhNvFNmBfLyFP&)PhaY~pX@dq00_$}5#BD%r(TLkb zZX0eRZmYWvk8&swaYx)g?~_iB12eb#Bp>S`i>a^Eos)9ixed52xJ@3tPiiA>t6Bk% za`1^LAaOv(ew9n(e6n1%W^u4qr#mO*x^o+FTX36j+bH1F8hF%)a$+2mvG`=`boZsS zN38{?szW*9I^A8>9d$?DQFqiGbw}M%chntqN8M3()E#w4-BEYc9d*Z_I{qI(sVZ>7 S!g25b0000&V6$L literal 0 HcmV?d00001 diff --git a/circle_app/assets/images/base/icon_login.png b/circle_app/assets/images/base/icon_login.png deleted file mode 100644 index 75d4218265ae5c05c14caf9dd925b2ae69a310bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14379 zcmV+`IMm09P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 lG#?!(7I - // print(value)) - // .catchError((error) { - // SmartDialog.dismiss(); - // print(error); - // }); - // await AppInstaller.installApk(filePath, actionRequired: false); + getUpVersion() async { + var data = await DioManager.instance.get(url: Api.APP_VERSION); + var bean = BaseResponse.fromJson( + data, (data) => UpdateInfo.fromJson(data)); + if (bean.isSuccess() && bean.data.update == 1) { + showReportDialog(Get.context!, bean.data.constraint == 0, bean.data); + } + } + void showReportDialog( + BuildContext context, bool isDismiss, UpdateInfo updateInfo) { + showDialog( + context: context, + barrierDismissible: isDismiss, + builder: (BuildContext context) { + return UpdateDialog( + isDismiss: isDismiss, + updateInfo: updateInfo, + ); + }, + ); } Future getAppVersion() async { diff --git a/circle_app/lib/app/aboutapp/view.dart b/circle_app/lib/app/aboutapp/view.dart index ec4cd03..136cd67 100644 --- a/circle_app/lib/app/aboutapp/view.dart +++ b/circle_app/lib/app/aboutapp/view.dart @@ -4,6 +4,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../../components/my_app_bar.dart'; +import '../../network/dio_manager.dart'; +import '../dialog/UpdateDialog.dart'; import 'logic.dart'; @@ -43,7 +45,7 @@ class AboutappPage extends StatelessWidget { // showToast("13"); }, child:Image.asset( - getBaseImage("icon_login"), // Replace with your image path + getBaseImage("ic_launcher"), // Replace with your image path width: 100.sp, height: 100.sp, fit: BoxFit.contain, @@ -146,7 +148,7 @@ class AboutappPage extends StatelessWidget { GestureDetector( behavior: HitTestBehavior.opaque, onTap: (){ - logic.updataApk(); + logic.getUpVersion(); }, child: Row( children: [ diff --git a/circle_app/lib/app/blacklist/view.dart b/circle_app/lib/app/blacklist/view.dart index fa52d99..f9713ac 100644 --- a/circle_app/lib/app/blacklist/view.dart +++ b/circle_app/lib/app/blacklist/view.dart @@ -100,8 +100,8 @@ class BlacklistPage extends StatelessWidget { children: [ Text( item.nickname, - style: const TextStyle(color: Colors.white70, - fontSize: 12, + style: TextStyle(color: Colors.white70, + fontSize: 12.sp, fontWeight: FontWeight.bold), ), SizedBox(width: 4.sp), @@ -116,6 +116,8 @@ class BlacklistPage extends StatelessWidget { width: 150.sp, child: Text( item.signature, + overflow: TextOverflow.ellipsis, // 超出部分使用省略号表示 + maxLines: 1, style: TextStyle(fontSize: 12.sp, color: const Color(0xFFB7BECC)), ), ), diff --git a/circle_app/lib/app/call_out/logic.dart b/circle_app/lib/app/call_out/logic.dart index d0dcf61..fa30c90 100644 --- a/circle_app/lib/app/call_out/logic.dart +++ b/circle_app/lib/app/call_out/logic.dart @@ -155,7 +155,9 @@ class Call_outLogic extends GetxController { if (beandata.isSuccess()) { showToast(beandata.msg); final logic = Get.put(CircleLogic()); + logic.setCircle(numbers[0].id); logic.refresh(); + logic.update(); // Navigator.pop(Get.context!, numbers); Get.back(); } else if (beandata.code == 30503) { diff --git a/circle_app/lib/app/circle/logic.dart b/circle_app/lib/app/circle/logic.dart index 6a07c7c..a45ba00 100644 --- a/circle_app/lib/app/circle/logic.dart +++ b/circle_app/lib/app/circle/logic.dart @@ -44,7 +44,7 @@ class CircleLogic extends GetxController { outCircle(String interest_id, bool isStatus) async { var data = await DioManager.instance.post( - url: Api.outCrrcle + interest_id + "/join", + url: "${Api.outCrrcle}$interest_id/join", params: {"status": isStatus ? "0" : "1"}); var bean = BaseResponse.fromJson(data, (data) => data); if (bean.code == 200) { @@ -57,6 +57,15 @@ class CircleLogic extends GetxController { showToast(bean.msg); } + + setCircle(String circleId){ + circle.lists.forEach((element) { + if (element.id.toString() == circleId.toString()) { + element.isJoin = true; + } + }); + } + //访问我的圈子人数 loadCirclePeopleData() async { var data = await DioManager.instance diff --git a/circle_app/lib/app/dialog/UpdateDialog.dart b/circle_app/lib/app/dialog/UpdateDialog.dart new file mode 100644 index 0000000..571e906 --- /dev/null +++ b/circle_app/lib/app/dialog/UpdateDialog.dart @@ -0,0 +1,226 @@ +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../../main.dart'; +import '../../network/dio_manager.dart'; +import '../../util/util.dart'; + +class UpdateDialog extends StatefulWidget { + final bool isDismiss; + final UpdateInfo updateInfo; + + UpdateDialog({required this.isDismiss, required this.updateInfo}); + + @override + _CustomDialogState createState() => _CustomDialogState(); +} + +class _CustomDialogState extends State { + double progress = 0; + bool isDownload = false; + + void incrementCounter() { + setState(() { + progress = progress + 0.1; + }); + } + + void setDownloadUi() { + setState(() { + isDownload = true; + }); + } + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: () async { + return widget.isDismiss; + }, + child: Dialog( + backgroundColor: Colors.transparent, + child: Container( + height: 277.sp, + padding: const EdgeInsets.all(1.0), + child: Stack( + children: [ + Container( + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(10.0), + gradient: const LinearGradient( + colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + ), + Container( + margin: EdgeInsets.all(1.sp), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(10.0), + gradient: const LinearGradient( + colors: [Color(0xFF4C3E5F), Color(0xFF324140)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + ), + Container( + margin: EdgeInsets.only(top: 24.sp), + child: Column( + children: [ + Center( + child: Text( + "发现新版本", + style: TextStyle(color: Colors.white, fontSize: 16.sp), + ), + ), + Container( + margin: EdgeInsets.only(top: 14.sp), + alignment: Alignment.center, + child: Image( + image: AssetImage(getBaseImage("ic_launcher")), + width: 70.sp, + height: 70.sp, + ), + ), + Container( + margin: EdgeInsets.only( + top: 12.sp, left: 14.sp, right: 14.sp), + alignment: Alignment.center, + child: Text( + widget.updateInfo.updateInfo, + textAlign: TextAlign.center, + style: TextStyle( + color: const Color(0xCCF7FAFA), fontSize: 16.sp), + ), + ), + isDownload + ? GestureDetector( + onTap: () async { + if (Platform.isIOS) { + final String appStoreUrl = 'https://apps.apple.com/app/id$iOSAPPid'; // App Store链接示例 + if (await canLaunch(appStoreUrl)) { + await launch(appStoreUrl); + } else { + throw 'Could not open App Store.'; + } + } else { + updataApk(widget.updateInfo.downloadUrl); + } + + //incrementCounter(); + }, + child: Container( + margin: EdgeInsets.only(top: 24.sp), + child: CircularProgressIndicator( + value: progress, + backgroundColor: Colors.grey, + valueColor: const AlwaysStoppedAnimation( + Colors.blue), + strokeWidth: 4.0.sp, + ), + ), + ) + : GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + setDownloadUi(); + + //Navigator.pop(context); + // logic.setBlock(); + }, + child: Container( + width: 200.sp, + margin: EdgeInsets.only(top: 24.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17), + gradient: const LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + begin: Alignment.centerLeft, + end: Alignment.centerRight, + ), + ), + padding: EdgeInsets.only( + top: 10.sp, + bottom: 10.sp, + left: 52.sp, + right: 52.sp), + child: Center( + child: Text( + "立即更新", + style: TextStyle( + color: Colors.white, + fontSize: 12.sp, + ), + ), + ), + ), + ) + ], + ), + ) + ], + ), + ), + ), + ); + } +} + +updataApk(String downloadUrl) async { + //SmartDialog.showLoading(); + var filePath = await getApplicationSupportDirectoryPath(); + filePath = filePath + "kuayou.apk"; + var data = await DioManager.instance + .download( + "https://xidi-official-website.oss-cn-shenzhen.aliyuncs.com/%E8%B7%A8%E5%8F%8B_2.3.4.apk", + filePath, (received, total) { + double progress = received / total * 100; + print('Download progress: $progress%'); + }) + .then((value) => print(value)) + .catchError((error) { + // SmartDialog.dismiss(); + print(error); + }); + //await AppInstaller.installApk(filePath, actionRequired: false); +} + +class UpdateInfo { + final String version; //最新版本号 + final int update; //是否要更新 + final int constraint; //是否强制 + final String publishTime; + final String downloadUrl; + final String updateInfo; + + UpdateInfo({ + required this.version, + required this.update, + required this.constraint, + required this.publishTime, + required this.downloadUrl, + required this.updateInfo, + }); + + factory UpdateInfo.fromJson(Map json) { + return UpdateInfo( + version: json['version'], + update: json['update'], + constraint: json['constraint'], + publishTime: json['publish_time'], + downloadUrl: json['download_url'], + updateInfo: json['update_info'], + ); + } +} diff --git a/circle_app/lib/app/friendslist/view.dart b/circle_app/lib/app/friendslist/view.dart index b5e385a..c7810ca 100644 --- a/circle_app/lib/app/friendslist/view.dart +++ b/circle_app/lib/app/friendslist/view.dart @@ -110,9 +110,11 @@ class FriendslistPage extends StatelessWidget { SizedBox(height: 8.sp), SizedBox( - width: 150.sp, + width: 200.sp, child: Text( item.signature, + overflow: TextOverflow.ellipsis, // 超出部分使用省略号表示 + maxLines: 1, style: TextStyle(fontSize: 12.sp, color: const Color(0xFFB7BECC)), ), ), diff --git a/circle_app/lib/app/help/view.dart b/circle_app/lib/app/help/view.dart index f70660e..0cc8739 100644 --- a/circle_app/lib/app/help/view.dart +++ b/circle_app/lib/app/help/view.dart @@ -47,7 +47,7 @@ class HelpPage extends StatelessWidget { child: Text( '04-10 19:51', style: TextStyle( - color: Color(0xFFB7BECC), + color: const Color(0xFFB7BECC), fontSize: 12.sp, ), ), @@ -165,7 +165,7 @@ class HelpPage extends StatelessWidget { ], ), ), - Spacer(), + const Spacer(), Padding( padding: EdgeInsets.only(bottom: 30.sp), child: Row( @@ -189,7 +189,7 @@ class HelpPage extends StatelessWidget { ), ), style: TextButton.styleFrom( - backgroundColor: Color(0xFF21BEAB), + backgroundColor: const Color(0xFF21BEAB), padding: EdgeInsets.symmetric( horizontal: 16.sp, vertical: 4.sp), shape: RoundedRectangleBorder( @@ -215,7 +215,7 @@ class HelpPage extends StatelessWidget { ), ), style: TextButton.styleFrom( - backgroundColor: Color(0xFF21BEAB), + backgroundColor: const Color(0xFF21BEAB), padding: EdgeInsets.symmetric( horizontal: 16.sp, vertical: 4.sp), shape: RoundedRectangleBorder( diff --git a/circle_app/lib/app/home/logic.dart b/circle_app/lib/app/home/logic.dart index af525fa..734a957 100644 --- a/circle_app/lib/app/home/logic.dart +++ b/circle_app/lib/app/home/logic.dart @@ -6,9 +6,11 @@ import 'package:circle_app/network/dio_manager.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../circle/view.dart'; +import '../dialog/UpdateDialog.dart'; import '../minefragment/view.dart'; import '../msg/view.dart'; import 'state.dart'; @@ -34,6 +36,33 @@ class HomeLogic extends GetxController { tabs.add(MinefragmentPage()); } + @override + void onReady() async{ + // TODO: implement onReady + super.onReady(); + + var data = await DioManager.instance.get(url: Api.APP_VERSION); + var bean = BaseResponse.fromJson( + data, (data) => UpdateInfo.fromJson(data)); + if(bean.isSuccess()&&bean.data.update==1){ + showReportDialog(Get.context!,bean.data.constraint==0,bean.data); + } + + + + + } + + void showReportDialog(BuildContext context,bool isDismiss,UpdateInfo updateInfo) { + showDialog( + context: context, + barrierDismissible: isDismiss, + builder: (BuildContext context) { + return UpdateDialog(isDismiss: isDismiss,updateInfo : updateInfo,); + } + ); + } + void getIMData() async { // _coreInstance.; diff --git a/circle_app/lib/app/home/view.dart b/circle_app/lib/app/home/view.dart index 6ba32d4..e4ad9da 100644 --- a/circle_app/lib/app/home/view.dart +++ b/circle_app/lib/app/home/view.dart @@ -23,9 +23,11 @@ class _HomePageState extends State with AutomaticKeepAliveClientMixin @override Widget build(BuildContext context) { + return GetBuilder(builder: (HomeLogic controller) { return GestureDetector( onTap: () { + controller.onReady(); // Get.toNamed(AppRoutes.Complete_materialPage); }, child: ExitAppConfirmation(child: Stack(children: [ diff --git a/circle_app/lib/app/likelist/view.dart b/circle_app/lib/app/likelist/view.dart index e35a8a0..9c6382d 100644 --- a/circle_app/lib/app/likelist/view.dart +++ b/circle_app/lib/app/likelist/view.dart @@ -27,7 +27,7 @@ class LikelistPage extends StatelessWidget { ), child: Scaffold( backgroundColor: Colors.transparent, - appBar: MyAppBar( + appBar: const MyAppBar( centerTitle: "喜欢我的", ), body: SafeArea( @@ -117,17 +117,19 @@ class LikelistPage extends StatelessWidget { ], ), SizedBox(height: 8.sp), - Container( - width: 150.sp, + SizedBox( + width: 200.sp, child: Text( item.user.signature, - style: TextStyle(fontSize: 12.sp, color: Color(0xFFB7BECC)), + overflow: TextOverflow.ellipsis, // 超出部分使用省略号表示 + maxLines: 1, + style: TextStyle(fontSize: 12.sp, color: const Color(0xFFB7BECC)), ), ), ], ), // Pla - Spacer(), + const Spacer(), GestureDetector( onTap: () { logic.setLike(index); @@ -136,7 +138,7 @@ class LikelistPage extends StatelessWidget { width: 75.sp, height: 28.sp, decoration: BoxDecoration( - color: Color(0xFFFF4D7C), + color: const Color(0xFFFF4D7C), borderRadius: BorderRadius.circular(14), ), child: Center( @@ -162,7 +164,7 @@ class LikelistPage extends StatelessWidget { Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(17.sp), - gradient: LinearGradient( + gradient: const LinearGradient( colors: [ Color.fromRGBO(141, 255, 248, 1.0), Color.fromRGBO(181, 211, 255, 1.0), diff --git a/circle_app/lib/app/myfeedbacklist/view.dart b/circle_app/lib/app/myfeedbacklist/view.dart index 2945418..9422274 100644 --- a/circle_app/lib/app/myfeedbacklist/view.dart +++ b/circle_app/lib/app/myfeedbacklist/view.dart @@ -83,6 +83,8 @@ class MyfeedbacklistPage extends StatelessWidget { SizedBox( height: 120.sp, child: GridView.builder( + scrollDirection: Axis.vertical, + physics: const NeverScrollableScrollPhysics(), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, // 每行显示的项目数量 ), diff --git a/circle_app/lib/app/userinfo/logic.dart b/circle_app/lib/app/userinfo/logic.dart index dcb5306..c3c802b 100644 --- a/circle_app/lib/app/userinfo/logic.dart +++ b/circle_app/lib/app/userinfo/logic.dart @@ -31,108 +31,93 @@ class UserinfoLogic extends GetxController { bool isShowAlbum = true; bool isLike = false; final startTime = DateTime.now(); + SharedPreferences? sharedPreferences; @override void onInit() async { super.onInit(); SmartDialog.showLoading(); - if (userId != '') { - SharedPreferences sharedPreferences = - await SharedPreferences.getInstance(); - if (sharedPreferences.getInt(SharedPreferencesHelper.USERID) != 0 && - sharedPreferences.getInt(SharedPreferencesHelper.USERID).toString() == - userId) { - userId = ''; - } + + sharedPreferences = await SharedPreferences.getInstance(); + int? sharedUserId = sharedPreferences!.getInt(SharedPreferencesHelper.USERID); + + if (userId.isNotEmpty && sharedUserId != null && sharedUserId.toString() == userId) { + userId = ''; } + state.imaglist.clear(); - if (userId == '') { - isMe = true; - var data = await DioManager.instance.get(url: Api.getUserInfo); - var bean = BaseResponse.fromJson( - data, (data) => ResponseBean.fromJson(data)); - if (bean.isSuccess()) { - isLikeFoMsg = - "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新"; - userInfoBean = bean.data.user; - isVip = userInfoBean!.vip; - //访问自己强制在线 - userInfoBean!.isOnline = true; - onLineCity = userInfoBean!.isOnline ? "在线" : "离线"; - isOnline = userInfoBean!.isOnline; - if (userInfoBean!.city != null) { - onLineCity = "$onLineCity·${userInfoBean!.city}"; - } - ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, - userInfoBean!.role, userInfoBean!.orientation); - } else { - showToast(bean.msg); - } - - var myAlbumData = await DioManager.instance.get( - url: Api.getMyAlbum, - ); - var myAlbumBean = BaseResponse.fromJson(myAlbumData, - (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData)); - if (myAlbumBean.isSuccess()) { - myAlbumBean.data.lists.forEach((element) { - state.imaglist.add(element); - }); - } + if (userId.isEmpty) { + fetchUserInfo(Api.getUserInfo); + fetchMyAlbum(Api.getMyAlbum); } else { - isMe = false; - var data = await DioManager.instance - .get(url: "${Api.getUserInfoTA + userId}/home"); - var bean = BaseResponse.fromJson( - data, (data) => ResponseBean.fromJson(data)); - if (bean.isSuccess()) { - isLike = bean.data.isFollow; - isLikeFoMsg = - "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新"; - userInfoBean = bean.data!.user; - isVip = userInfoBean!.vip; - imId = bean.data.accountId; - onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线"; - if (userInfoBean!.city != null) { - onLineCity = "$onLineCity·${userInfoBean!.city}"; - } + fetchUserInfo("${Api.getUserInfoTA + userId}/home"); + fetchMyAlbum("${Api.getTaAlbum + userId}/albums"); + fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status"); + } + SmartDialog.dismiss(); + fetchQnToken(Api.getqiniuToken); + } - ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, - userInfoBean!.role, userInfoBean!.orientation); - } else { - showToast(bean.msg); + Future fetchUserInfo(String url) async { + var data = await DioManager.instance.get(url: url); + var bean = BaseResponse.fromJson( + data, (data) => ResponseBean.fromJson(data)); + + if (bean.isSuccess()) { + isMe = userId.isEmpty; + isLike = bean.data.isFollow; + isLikeFoMsg = "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新"; + userInfoBean = bean.data.user; + isVip = userInfoBean?.vip ?? 0; + imId = bean.data.accountId; + if (isMe) { + isOnline = true; + }else{ + isOnline = userInfoBean!.isOnline; } - - var myAlbumData = await DioManager.instance - .get(url: "${Api.getTaAlbum + userId}/albums"); - var myAlbumBean = BaseResponse.fromJson(myAlbumData, - (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData)); - if (myAlbumBean.isSuccess()) { - myAlbumBean.data.lists.forEach((element) { - state.imaglist.add(AlbumListItem( - id: element.id, type: element.type, url: element.url)); - }); + onLineCity = isOnline ? "在线" : "离线"; + if (userInfoBean?.city != null) { + onLineCity = "$onLineCity·${userInfoBean!.city}"; + }else{ + onLineCity = "$onLineCity·外星"; } - - var urgedata = await DioManager.instance - .get(url: "${Api.getUrgeStatus + userId}/urge/album/status"); - var urgeBean = BaseResponse.fromJson( - urgedata, (urgedata) => UrgentStatus.fromJson(urgedata)); - //if(urgedata.isSuccess()){ - isUrgeStatus = urgeBean.data.isUrgent; - //} + ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation); + } else { + showToast(bean.msg); } update(); - SmartDialog.dismiss(); - var data = - await DioManager.instance.get(url: Api.getqiniuToken, params: {}); + } + + Future fetchMyAlbum(String url) async { + var myAlbumData = await DioManager.instance.get(url: url); + var myAlbumBean = BaseResponse.fromJson( + myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData)); + + if (myAlbumBean.isSuccess()) { + state.imaglist.addAll(myAlbumBean.data.lists); + } + update(); + } + + Future fetchUrgeStatus(String url) async { + var urgedata = await DioManager.instance.get(url: url); + var urgeBean = BaseResponse.fromJson( + urgedata, (urgedata) => UrgentStatus.fromJson(urgedata)); + isUrgeStatus = urgeBean.data?.isUrgent ?? false; + update(); + } + + Future fetchQnToken(String url) async { + var data = await DioManager.instance.get(url: url, params: {}); var bean = BaseResponse.fromJson( data, (data) => QnTokenData.fromJson(data)); if (bean.isSuccess()) { - quToken = bean.data!.token.toString(); + quToken = bean.data?.token.toString() ?? ''; } + } + urgeChange() async { var data = await DioManager.instance .post(url: "${Api.urgeAlbum + userId}/urge/album"); diff --git a/circle_app/lib/app/userinfo/view.dart b/circle_app/lib/app/userinfo/view.dart index daec3e6..e6fd327 100644 --- a/circle_app/lib/app/userinfo/view.dart +++ b/circle_app/lib/app/userinfo/view.dart @@ -1,6 +1,4 @@ - import 'package:cached_network_image/cached_network_image.dart'; -import 'package:circle_app/app/chat/logic.dart'; import 'package:circle_app/app/userinfo/widgets/home_call_out.dart'; import 'package:circle_app/main.dart'; import 'package:flutter/material.dart'; @@ -22,6 +20,7 @@ class UserinfoPage extends StatefulWidget { class _MyTabbedScreenState extends State with SingleTickerProviderStateMixin { late TabController _tabController; + late PageController _pageController; ScrollController scrollController = ScrollController(); bool isShowBlackTitle = false; @@ -29,8 +28,9 @@ class _MyTabbedScreenState extends State @override void initState() { super.initState(); + _pageController = PageController(); _tabController = TabController( - length: 2, vsync: this, animationDuration: const Duration(milliseconds: 200)); + length: 2, vsync: this); _tabController.animation!.addListener(_handleTabChange); // _tabController.addListener(_handleTabChange); // _tabController @@ -144,10 +144,6 @@ class _MyTabbedScreenState extends State final chatButton = GestureDetector( onTap: () { if (logic.userInfoBean != null) { - - - - pushChatPage(logic.userInfoBean!.id.toString(),logic.imId, logic.userInfoBean!.nickname); } }, @@ -199,131 +195,144 @@ class _MyTabbedScreenState extends State final interests = userInfoBean?.interests ?? []; return Container( - padding: EdgeInsets.symmetric(horizontal: 19.sp, vertical: 14.sp), + padding: EdgeInsets.symmetric(vertical: 14.sp), child: Column( children: [ - Row( - children: [ - _imagelistView(controller), - Expanded( - child: buildUserContainer(controller), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - Text( - userInfoBean?.nickname ?? "", - style: const TextStyle( - color: Color.fromRGBO(247, 250, 250, 1.0), - fontSize: 14, - ), - ), - SizedBox(width: 8.sp), - _buildInfoRow(controller), - ], - ), - Row( - children: [ - Container( - margin: EdgeInsets.only(right: 5.sp), - width: 5.sp, - height: 5.sp, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: logic.isOnline - ? const Color(0xFF00FFF4) - : const Color(0xFF787575), - ), - ), - Text( - controller.onLineCity, - style: TextStyle( - fontSize: 12, - color: logic.isOnline - ? const Color(0xFF00FFF4) - : const Color(0xFF787575), - ), - ), - ], - ), - ], - ), - SizedBox( - height: 59.sp, - child: ListView.builder( - itemCount: interests.length, - scrollDirection: Axis.horizontal, - padding: EdgeInsets.symmetric(vertical: 18.sp), - itemBuilder: (context, index) { - final interest = interests[index]; - return Container( - margin: EdgeInsets.only(right: 11.sp), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17.0), - gradient: const LinearGradient( - colors: [ - Color(0xFF06F9FA), - Color(0xFFDC5BFD), - ], - ), - color: const Color(0xFF392D53), - ), - child: Container( - margin: EdgeInsets.all(0.2.sp), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17.0), - color: const Color(0xFF392D53), - ), - child: Padding( - padding: EdgeInsets.only( - top: 2.sp, - bottom: 2.sp, - left: 15.sp, - right: 15.sp, - ), - child: Center( - child: Text( - interest.title, - style: const TextStyle( - fontSize: 11.0, - color: Colors.white, - ), - ), - ), - ), - ), - ), - ); - }, - ), - ), - titleTab(controller), - Expanded( - child: TabBarView( - controller: _tabController, + Container( + padding: EdgeInsets.symmetric(horizontal: 19.sp), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - _imageAdapter(controller), - Container( - margin: EdgeInsets.only(bottom: 26.sp), - child: HomeCallOutView(controller.userId), + _imagelistView(controller), + Expanded( + child: buildUserContainer(controller), ), ], ), ), + Container( + padding: EdgeInsets.symmetric(horizontal: 19.sp,), + margin: EdgeInsets.only(top: 19.sp), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Text( + userInfoBean?.nickname ?? "", + style: const TextStyle( + color: Color.fromRGBO(247, 250, 250, 1.0), + fontSize: 14, + ), + ), + SizedBox(width: 8.sp), + _buildInfoRow(controller), + ], + ), + Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5.sp), + width: 5.sp, + height: 5.sp, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: logic.isOnline + ? const Color(0xFF00FFF4) + : const Color(0xFF787575), + ), + ), + Text( + controller.onLineCity, + style: TextStyle( + fontSize: 12.sp, + color: logic.isOnline + ? const Color(0xFF00FFF4) + : const Color(0xFF787575), + ), + ), + ], + ), + ], + ), + ), + SizedBox( + height: 59.sp, + + child: _buildInterestsListView(interests), + ), + titleTab(controller), + Expanded( + child: PageView( + controller: _pageController, + onPageChanged: (index) { + _tabController.animateTo(index); + }, + children: [ + _imageAdapter(controller), + HomeCallOutView(controller.userId), + ], + ), + ), + ], ), ); } + Widget _buildInterestsListView(List interests) { + return ListView.builder( + itemCount: interests.length, + scrollDirection: Axis.horizontal, + padding: EdgeInsets.symmetric(vertical: 18.sp,horizontal: 19.sp), + itemBuilder: (context, index) { + final interest = interests[index]; + return Container( + margin: EdgeInsets.only(right: 11.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17.0), + gradient: const LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + ), + color: const Color(0xFF392D53), + ), + child: Container( + margin: EdgeInsets.all(0.2.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17.0), + color: const Color(0xFF392D53), + ), + child: Padding( + padding: EdgeInsets.only( + top: 2.sp, + bottom: 2.sp, + left: 15.sp, + right: 15.sp, + ), + child: Center( + child: Text( + interest.title, + style: const TextStyle( + fontSize: 11.0, + color: Colors.white, + ), + ), + ), + ), + ), + ); + }, + ); + } + Widget titleTab(UserinfoLogic controller) { return Container( alignment: Alignment.centerLeft, + padding: EdgeInsets.symmetric(horizontal: 10.sp), height: 27.sp, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -331,17 +340,32 @@ class _MyTabbedScreenState extends State TabBar( isScrollable: true, controller: _tabController, + indicator: UnderlineTabIndicator( + borderSide: BorderSide( + color:const Color(0xFF00FFF4) , + width: 2.sp, + ), + insets: EdgeInsets.symmetric(horizontal: 6.0.sp), + borderRadius: BorderRadius.circular(18.0), + ), indicatorColor: const Color(0xFF00FFF4), indicatorWeight: 2.sp, labelColor: const Color(0xFF00FFF4), unselectedLabelColor: const Color(0xB3FFFFFF), indicatorSize: TabBarIndicatorSize.label, - tabs: const [ + tabs: const [ Tab( text: "形象照", ), Tab(text: "喊话"), ], + onTap: (index){ + _pageController.animateToPage( + index, // 目标页面索引 + duration: const Duration(milliseconds: 300), // 动画时长 + curve: Curves.ease, // 动画曲线 + ); + }, ), GestureDetector( onTap: () { @@ -393,22 +417,23 @@ class _MyTabbedScreenState extends State Widget _imageAdapter(UserinfoLogic controller) { - return Stack( - children: [ - Column( - children: [ - if (controller.isMe) - Container( - margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp), - child: Text( - controller.isLikeFoMsg, - style: const TextStyle(color: Colors.white30), + return Container( + padding: EdgeInsets.symmetric(horizontal: 19.sp), + child: Stack( + children: [ + Column( + children: [ + if (controller.isMe) + Container( + margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp), + child: Text( + controller.isLikeFoMsg, + style: const TextStyle(color: Colors.white30), + ), ), - ), - Expanded( - child: Container( - margin: const EdgeInsets.only(bottom: 58.0), + Expanded( child: GridView.builder( + padding: const EdgeInsets.only(bottom: 58.0), shrinkWrap: true, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, @@ -461,51 +486,51 @@ class _MyTabbedScreenState extends State }, ), ), - ), - ], - ), - if (logic.isMe) - Positioned( - left: 0, - right: 0, - bottom: 26.sp, - child: GestureDetector( - onTap: () async { - var data = await Get.toNamed( - AppRoutes.Complete_materialPage, - arguments: "user", - ); - logic.onInit(); - }, - child: Center( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(17), - gradient: const LinearGradient( - colors: [ - Color(0xFF06F9FA), - Color(0xFFDC5BFD), - ], - begin: Alignment.centerLeft, - end: Alignment.centerRight, + ], + ), + if (logic.isMe) + Positioned( + left: 0, + right: 0, + bottom: 26.sp, + child: GestureDetector( + onTap: () async { + await Get.toNamed( + AppRoutes.Complete_materialPage, + arguments: "user", + ); + logic.onInit(); + }, + child: Center( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(17), + gradient: const LinearGradient( + colors: [ + Color(0xFF06F9FA), + Color(0xFFDC5BFD), + ], + begin: Alignment.centerLeft, + end: Alignment.centerRight, + ), ), - ), - padding: EdgeInsets.symmetric( - vertical: 10.sp, - horizontal: 55.sp, - ), - child: const Text( - "完善个人形象", - style: TextStyle( - color: Colors.white, - fontSize: 12, + padding: EdgeInsets.symmetric( + vertical: 10.sp, + horizontal: 55.sp, + ), + child: const Text( + "完善个人形象", + style: TextStyle( + color: Colors.white, + fontSize: 12, + ), ), ), ), ), ), - ), - ], + ], + ), ); } @@ -552,11 +577,12 @@ class _MyTabbedScreenState extends State Widget buildUserContainer(UserinfoLogic controller) { return Container( - margin: EdgeInsets.symmetric(horizontal: 1.sp, vertical: 14.sp), + margin: EdgeInsets.only( left: 3.sp), height: 58.sp, decoration: BoxDecoration( image: DecorationImage( image: AssetImage(getMineImage("icon_user_content")), + fit: BoxFit.fill, ), ), @@ -581,6 +607,7 @@ class _MyTabbedScreenState extends State alignment: Alignment.center, children: [ Container( + width: 68.sp, height: 68.sp, decoration: const BoxDecoration( diff --git a/circle_app/lib/app/userinfo/widgets/home_call_out.dart b/circle_app/lib/app/userinfo/widgets/home_call_out.dart index b091bd0..872deeb 100644 --- a/circle_app/lib/app/userinfo/widgets/home_call_out.dart +++ b/circle_app/lib/app/userinfo/widgets/home_call_out.dart @@ -1,4 +1,3 @@ - import 'package:cached_network_image/cached_network_image.dart'; import 'package:circle_app/app/circle/state.dart'; import 'package:circle_app/app/circle/widgets/video_item.dart'; @@ -16,6 +15,7 @@ class HomeCallOutView extends StatefulWidget { // Get.lazyPut(() => ListLogic()); String userId; + HomeCallOutView(this.userId, {super.key}); @override @@ -23,7 +23,6 @@ class HomeCallOutView extends StatefulWidget { } class _HomeCallOutViewState extends State { - HomeCallOutLogic? listsLg; @override @@ -56,7 +55,10 @@ class _HomeCallOutViewState extends State { Container( height: Get.height, width: Get.width, - margin: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom + 30.sp), + margin: EdgeInsets.only( + bottom: MediaQuery.of(context).padding.bottom + 56.sp, + left: 19.sp, + right: 19.sp), child: RefreshIndicator( onRefresh: () async { listLogic.refreshData(); @@ -78,9 +80,12 @@ class _HomeCallOutViewState extends State { } } else { return Container( - margin: EdgeInsets.only(top: listLogic.callOutMore ? 0 : 10.sp), - child: loaddingWidget( - listLogic.callOutMore), + margin: EdgeInsets.only( + top: listLogic.callOutMore + ? 0 + : 10.sp), + child: + loaddingWidget(listLogic.callOutMore), ); } }), @@ -100,7 +105,6 @@ class _HomeCallOutViewState extends State { maxLines: 2, ); - double picHeight = 0.0; int type = 0; @@ -121,216 +125,238 @@ class _HomeCallOutViewState extends State { } } double titleHeight = textWidth(lists.interest!['title']); - double widgetHeight = 115.sp + contentHeight(lists.content!) + (picHeight > 0 ? picHeight + 5 : 0); + double widgetHeight = 115.sp + + contentHeight(lists.content!) + + (picHeight > 0 ? picHeight + 5 : 0); - return Container( - margin: EdgeInsets.only(top: 10.sp), - width: Get.width, - height: widgetHeight, - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage( - getCircleImage('pic_bg'), - ))), - child: Stack(children: [ - Positioned( - left: 0, - top: 2.sp, - child: Image.asset(getCircleImage('vip_say')), - height: 18.sp, + return Column( + children: [ + Container( + margin: EdgeInsets.only(top: 14.sp,bottom: 10.sp), + alignment: Alignment.centerLeft, + child: Text( + lists.create_time.toString(), + style: TextStyle(color: Colors.white, fontSize: 12.sp), ), - Positioned( - right: 2.sp, - top: 2.sp, - child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('location'), - width: titleHeight + 15.sp, - height: 20.sp, - fit: BoxFit.fitWidth, - ), - Text( - lists.interest!['title'], - style: TextStyle(color: Colors.white, fontSize: 12.sp), - ) - ], - ), - ), - Container( - height: widgetHeight, + ), + Container( + margin: EdgeInsets.only(top: 10.sp), width: Get.width, - padding: EdgeInsets.only(top: 12.sp, left: 12.sp, right: 12.sp), - child: Column( - children: [ - Container( - height: 72.sp, - child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - GestureDetector( - child: Stack( - alignment: Alignment.center, + height: widgetHeight, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage( + getCircleImage('pic_bg'), + ))), + child: Stack(children: [ + Positioned( + left: 0, + top: 2.sp, + child: Image.asset(getCircleImage('vip_say')), + height: 18.sp, + ), + Positioned( + right: 2.sp, + top: 2.sp, + child: Stack( + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('location'), + width: titleHeight + 15.sp, + height: 20.sp, + fit: BoxFit.fitWidth, + ), + Text( + lists.interest!['title'], + style: TextStyle(color: Colors.white, fontSize: 12.sp), + ) + ], + ), + ), + Container( + height: widgetHeight, + width: Get.width, + padding: EdgeInsets.only(top: 12.sp, left: 12.sp, right: 12.sp), + child: Column( + children: [ + Container( + height: 72.sp, + child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: 42.sp, - ), GestureDetector( - onTap: () { - listsLg?.pushMsgPage(lists, lists.id.toString()); - }, - child: ClipOval( - child: Image.network( - lists.user!.avatar!, - width: 40.sp, - height: 40.sp, - fit: BoxFit.fill, + child: Stack( + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: 42.sp, ), - ), - ) - ], - )), - Expanded( - child: Container( - padding: EdgeInsets.only(left: 8.sp, top: 12.sp), - alignment: Alignment.centerLeft, - height: 72.sp, - child: Column( - children: [ - Row( + GestureDetector( + onTap: () { + listsLg?.pushMsgPage( + lists, lists.id.toString()); + }, + child: ClipOval( + child: Image.network( + lists.user!.avatar!, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover, + ), + ), + ) + ], + )), + Expanded( + child: Container( + padding: EdgeInsets.only(left: 8.sp, top: 12.sp), + alignment: Alignment.centerLeft, + height: 72.sp, + child: Column( children: [ - Text( - lists.user!.nickname!, - style: TextStyle( - color: Colors.white, - fontSize: 18.sp, - fontWeight: FontWeight.w600), + Row( + children: [ + Text( + lists.user!.nickname!, + style: TextStyle( + color: Colors.white, + fontSize: 18.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + width: 8.sp, + ), + lists.user!.vip! == 0 + ? Container() + : Image.asset( + getCircleImage('vip'), + width: 36.sp, + ) + ], ), SizedBox( - width: 8.sp, + height: 4.sp, + ), + Row( + children: [ + Container( + alignment: Alignment.center, + height: 18.sp, + padding: EdgeInsets.only( + left: 6.sp, right: 6.sp), + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(9.sp), + gradient: const LinearGradient( + begin: Alignment(0.25, 0.5), + end: Alignment(0.75, 0.5), + colors: [ + Color(0xff8DFFF8), + Color(0xffB5D3FF) + ])), + child: Text( + getAgeCOntent( + lists.user!.gender!, + lists.user!.age!, + lists.user!.role!, + lists.user!.orientation!), + + // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', + style: TextStyle( + color: Colors.black, + fontSize: 10.sp, + ), + ), + ) + ], ), - lists.user!.vip! == 0 - ? Container() - : Image.asset( - getCircleImage('vip'), - width: 36.sp, - ) ], ), - SizedBox( - height: 4.sp, - ), - Row( - children: [ - Container( - alignment: Alignment.center, - height: 18.sp, - padding: - EdgeInsets.only(left: 6.sp, right: 6.sp), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(9.sp), - gradient: const LinearGradient( - begin: Alignment(0.25, 0.5), - end: Alignment(0.75, 0.5), - colors: [ - Color(0xff8DFFF8), - Color(0xffB5D3FF) - ])), - - child: Text( - getAgeCOntent(lists.user!.gender!, lists.user!.age!, - lists.user!.role!, lists.user!.orientation!), - - // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', - style: TextStyle( - color: Colors.black, - fontSize: 12.sp, + )), + ], + ), + ), + Container( + alignment: Alignment.topLeft, + // margin: EdgeInsets.only(top: 4.sp), + child: descText, + ), + Container( + height: picHeight, + margin: EdgeInsets.only(top: 5.sp), + child: picHeight == 140.sp + ? ClipRRect( + borderRadius: BorderRadius.circular(6.sp), + child: VideoItemWidget(lists.album![0]!.url!)) + : GridView.builder( + itemCount: lists.album!.length, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, //横轴三个子widget + crossAxisSpacing: 8.sp, + mainAxisSpacing: 8.sp, + childAspectRatio: 1.0 //宽高比为1时,子widget + ), + itemBuilder: (contentxt, currentIndex) { + Album album = lists.album![currentIndex]; + return GestureDetector( + onTap: () { + var imgList = []; + for (var element in lists.album!) { + imgList.add(element.url!); + } + Get.toNamed(AppRoutes.Swiper, arguments: { + 'imaglist': imgList, + 'index': currentIndex + }); + }, + child: ClipRRect( + borderRadius: BorderRadius.circular(6.sp), + child: CachedNetworkImage( + imageUrl: album.url!, + errorWidget: (context, url, error) => + Icon(Icons.error), + fit: BoxFit.cover, ), ), - ) - ], + ); + }), + ), + Container( + width: Get.width, + margin: EdgeInsets.only(top: 4.sp), + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + lists.create_time!, + style: TextStyle( + color: Colors.white, fontSize: 12.sp), ), + widget.userId.isNotEmpty + ? Container() + : GestureDetector( + onTap: () { + showTipPiker(lists.id!.toString(), + listsLg!.lists.indexOf(lists)); + }, + child: Image.asset( + getCircleImage('delete'), + width: 14.sp, + )) ], - ), - )), - ], - ), + )) + ], ), - Container( - alignment: Alignment.topLeft, - // margin: EdgeInsets.only(top: 4.sp), - child: descText, - ), - Container( - height: picHeight, - margin: EdgeInsets.only(top: 5.sp), - child: picHeight == 140.sp - ? ClipRRect( - borderRadius: BorderRadius.circular(6.sp), - child: VideoItemWidget(lists.album![0]!.url!)) - : GridView.builder( - itemCount: lists.album!.length, - physics: const NeverScrollableScrollPhysics(), - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, //横轴三个子widget - crossAxisSpacing: 8.sp, - mainAxisSpacing: 8.sp, - childAspectRatio: 1.0 //宽高比为1时,子widget - ), - itemBuilder: (contentxt, currentIndex) { - Album album = lists.album![currentIndex]; - return GestureDetector( - onTap: () { - var imgList = []; - for (var element in lists.album!) { - imgList.add(element.url!); - } - Get.toNamed(AppRoutes.Swiper, arguments: { - 'imaglist': imgList, - 'index': currentIndex - }); - }, - child: ClipRRect( - borderRadius: BorderRadius.circular(6.sp), - child: CachedNetworkImage( - imageUrl: album.url!, - errorWidget: (context, url, error) => - Icon(Icons.error), - fit: BoxFit.cover, - ), - ), - ); - }), - ), - Container( - width: Get.width, - margin: EdgeInsets.only(top: 4.sp), - alignment: Alignment.centerLeft, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - lists.create_time!, - style: - TextStyle(color: Colors.white, fontSize: 12.sp), - ), - widget.userId.isNotEmpty - ? Container() - : GestureDetector( - onTap: () { - showTipPiker(lists.id!.toString(), listsLg!.lists.indexOf(lists)); - }, - child: Image.asset(getCircleImage('delete'),width: 14.sp,)) - ], - )) - ], - ), - ) - ])); + ) + ])), + ], + ); } ///普通图文喊话 @@ -363,215 +389,236 @@ class _HomeCallOutViewState extends State { double titleHeight = textWidth(lists.interest!['title']); - return Container( - margin: EdgeInsets.only(top: 10.sp), - width: Get.width, - height: picHeight > 0 ? 105.sp + contentHeight(lists.content!) + picHeight : 100.sp + contentHeight(lists.content!), - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage( - getCircleImage('normal_bg'), - ))), - child: Stack( - children: [ - Positioned( - right: 2.sp, - top: 2.sp, - child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('location'), - width: titleHeight + 15.sp, - height: 20.sp, - fit: BoxFit.fitWidth, - ), - Text( - lists.interest!['title'], - style: TextStyle(color: Colors.white, fontSize: 12.sp), - ) - ], - ), - // height: 18.sp, + return Column( + children: [ + Container( + margin: EdgeInsets.only(top: 14.sp,bottom: 10.sp), + alignment: Alignment.centerLeft, + child: Text( + lists.create_time.toString(), + style: TextStyle(color: Colors.white, fontSize: 12.sp), ), - Container( - // height: 130.sp + contentHeight(lists.content!) + picHeight, - width: Get.width, - // color: Colors.blue, - padding: EdgeInsets.only(left: 12.sp, right: 12.sp), - child: Column( - children: [ - Container( - height: 72.sp, - child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - GestureDetector( - child: Stack( - alignment: Alignment.center, + ), + Container( + margin: EdgeInsets.only(top: 10.sp), + width: Get.width, + height: picHeight > 0 + ? 105.sp + contentHeight(lists.content!) + picHeight + : 100.sp + contentHeight(lists.content!), + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage( + getCircleImage('normal_bg'), + ))), + child: Stack( + children: [ + Positioned( + right: 2.sp, + top: 2.sp, + child: Stack( + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('location'), + width: titleHeight + 15.sp, + height: 20.sp, + fit: BoxFit.fitWidth, + ), + Text( + lists.interest!['title'], + style: TextStyle(color: Colors.white, fontSize: 12.sp), + ) + ], + ), + // height: 18.sp, + ), + Container( + // height: 130.sp + contentHeight(lists.content!) + picHeight, + width: Get.width, + // color: Colors.blue, + padding: EdgeInsets.only(left: 12.sp, right: 12.sp), + child: Column( + children: [ + Container( + height: 72.sp, + child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: 42.sp, - ), GestureDetector( - onTap: () {}, - child: ClipOval( - child: Image.network( - lists.user!.avatar!, - width: 40.sp, - height: 40.sp, - fit: BoxFit.fill, - ), - )) - ], - )), - Expanded( - child: Container( - padding: EdgeInsets.only(left: 8.sp, top: 12.sp), - alignment: Alignment.centerLeft, - height: 72.sp, - child: Column( - children: [ - Row( + child: Stack( + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: 42.sp, + ), + GestureDetector( + onTap: () {}, + child: ClipOval( + child: Image.network( + lists.user!.avatar!, + width: 40.sp, + height: 40.sp, + fit: BoxFit.cover, + ), + )) + ], + )), + Expanded( + child: Container( + padding: EdgeInsets.only(left: 8.sp, top: 12.sp), + alignment: Alignment.centerLeft, + height: 72.sp, + child: Column( children: [ - Text( - lists.user!.nickname! ?? '', - style: TextStyle( - color: Colors.white, - fontSize: 18.sp, - fontWeight: FontWeight.w600), + Row( + children: [ + Text( + lists.user!.nickname! ?? '', + style: TextStyle( + color: Colors.white, + fontSize: 18.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + width: 8.sp, + ), + lists.user!.vip! == 0 + ? Container() + : Image.asset( + getCircleImage('vip'), + width: 36.sp, + ) + ], ), SizedBox( - width: 8.sp, + height: 4.sp, ), - lists.user!.vip! == 0 - ? Container() - : Image.asset( - getCircleImage('vip'), - width: 36.sp, - ) - ], - ), - SizedBox( - height: 4.sp, - ), - Row( - children: [ - Container( - alignment: Alignment.center, - height: 18.sp, - padding: - EdgeInsets.only(left: 6.sp, right: 6.sp), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(9.sp), - gradient: const LinearGradient( - begin: Alignment(0.25, 0.5), - end: Alignment(0.75, 0.5), - colors: [ - Color(0xff8DFFF8), - Color(0xffB5D3FF) - ])), - child: Text( - getAgeCOntent(lists.user!.gender!, lists.user!.age!, - lists.user!.role!, lists.user!.orientation!), - // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', - style: TextStyle( - color: Colors.black, - fontSize: 12.sp, - ), - ), - ) - ], - ), - ], - ), - )), - ], - ), - ), - Container( - alignment: Alignment.topLeft, - // margin: EdgeInsets.only(top: 4.sp), - child: descText, - ), - picHeight > 0 - ? Container( - height: picHeight, - alignment: Alignment.centerLeft, - margin: EdgeInsets.only(top: 5.sp), - child: picHeight == 140.sp - ? ClipRRect( - borderRadius: BorderRadius.circular(6.sp), - child: VideoItemWidget(lists.album![0].url!)) - : GridView.builder( - itemCount: lists.album!.length, - physics: const NeverScrollableScrollPhysics(), - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, //横轴三个子widget - crossAxisSpacing: 8.sp, - mainAxisSpacing: 8.sp, - childAspectRatio: 1.0 //宽高比为1时,子widget + Row( + children: [ + Container( + alignment: Alignment.center, + height: 18.sp, + padding: + EdgeInsets.only(left: 6.sp, right: 6.sp), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(9.sp), + gradient: const LinearGradient( + begin: Alignment(0.25, 0.5), + end: Alignment(0.75, 0.5), + colors: [ + Color(0xff8DFFF8), + Color(0xffB5D3FF) + ])), + child: Text( + getAgeCOntent( + lists.user!.gender!, + lists.user!.age!, + lists.user!.role!, + lists.user!.orientation!), + // '${genderList[lists.user!.gender!]}.${lists.user!.age}.${roleList[lists.user!.role!]}.${orientationList[lists.user!.orientation!]}', + style: TextStyle( + color: Colors.black, + fontSize: 12.sp, ), - itemBuilder: (contentxt, currentIndex) { - Album album = lists.album![currentIndex]; - if (album.type == 2) { - return ClipRRect( - borderRadius: - BorderRadius.circular(6.sp), - child: VideoItemWidget(album.url!)); - } - return GestureDetector( - onTap: () { - var imgList = []; - for (var element in lists.album!) { - imgList.add(element.url!); - } - Get.toNamed(AppRoutes.Swiper, arguments: { - 'imaglist': imgList, - 'index': currentIndex - }); - }, - child: ClipRRect( - borderRadius: BorderRadius.circular(6.sp), - child: CachedNetworkImage( - imageUrl: album.url!, - errorWidget: (context, url, error) => - Icon(Icons.error), - fit: BoxFit.cover, ), - ), - ); - })) - : Container(), - Container( - width: Get.width, - margin: EdgeInsets.only(top: 4.sp), - alignment: Alignment.centerLeft, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - lists.create_time!, - style: - TextStyle(color: Colors.white, fontSize: 12.sp), - ), - widget.userId.isNotEmpty - ? Container() - : GestureDetector( - onTap: () { - showTipPiker(lists.id!.toString(), listsLg!.lists.indexOf(lists)); - }, - child: Image.asset(getCircleImage('delete'),width: 14.sp,)) - ], - )) - ], - ), - ) - ], - ), + ) + ], + ), + ], + ), + )), + ], + ), + ), + Container( + alignment: Alignment.topLeft, + // margin: EdgeInsets.only(top: 4.sp), + child: descText, + ), + picHeight > 0 + ? Container( + height: picHeight, + alignment: Alignment.centerLeft, + margin: EdgeInsets.only(top: 5.sp), + child: picHeight == 140.sp + ? ClipRRect( + borderRadius: BorderRadius.circular(6.sp), + child: VideoItemWidget(lists.album![0].url!)) + : GridView.builder( + itemCount: lists.album!.length, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, //横轴三个子widget + crossAxisSpacing: 8.sp, + mainAxisSpacing: 8.sp, + childAspectRatio: 1.0 //宽高比为1时,子widget + ), + itemBuilder: (contentxt, currentIndex) { + Album album = lists.album![currentIndex]; + if (album.type == 2) { + return ClipRRect( + borderRadius: + BorderRadius.circular(6.sp), + child: VideoItemWidget(album.url!)); + } + return GestureDetector( + onTap: () { + var imgList = []; + for (var element in lists.album!) { + imgList.add(element.url!); + } + Get.toNamed(AppRoutes.Swiper, arguments: { + 'imaglist': imgList, + 'index': currentIndex + }); + }, + child: ClipRRect( + borderRadius: BorderRadius.circular(6.sp), + child: CachedNetworkImage( + imageUrl: album.url!, + errorWidget: (context, url, error) => + Icon(Icons.error), + fit: BoxFit.cover, + ), + ), + ); + })) + : Container(), + Container( + width: Get.width, + margin: EdgeInsets.only(top: 4.sp), + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + lists.create_time!, + style: + TextStyle(color: Colors.white, fontSize: 12.sp), + ), + widget.userId.isNotEmpty + ? Container() + : GestureDetector( + onTap: () { + showTipPiker(lists.id!.toString(), + listsLg!.lists.indexOf(lists)); + }, + child: Image.asset( + getCircleImage('delete'), + width: 14.sp, + )) + ], + )) + ], + ), + ) + ], + ), + ), + ], ); } @@ -604,11 +651,12 @@ class _HomeCallOutViewState extends State { double textWidth(value) { TextPainter painter = TextPainter( - ///AUTO:华为手机如果不指定locale的时候,该方法算出来的文字高度是比系统计算偏小的。 + ///AUTO:华为手机如果不指定locale的时候,该方法算出来的文字高度是比系统计算偏小的。 locale: WidgetsBinding.instance!.window.locale, maxLines: 1, textDirection: TextDirection.ltr, - textScaleFactor: 1, //字体缩放大小 + textScaleFactor: 1, + //字体缩放大小 text: TextSpan( text: value, style: TextStyle( @@ -618,38 +666,40 @@ class _HomeCallOutViewState extends State { return painter.width; } - showTipPiker(String callOutId,int index) { + showTipPiker(String callOutId, int index) { return Get.bottomSheet( - Scaffold( - backgroundColor: Colors.transparent, - body: CupertinoAlertDialog( - content: SingleChildScrollView( - child: ListBody( - children: const [ - Text("是否要删除该喊话?"), - ], - ), + Scaffold( + backgroundColor: Colors.transparent, + body: CupertinoAlertDialog( + content: SingleChildScrollView( + child: ListBody( + children: const [ + Text("是否要删除该喊话?"), + ], ), - actions: [ - CupertinoDialogAction( - child: const Text("确定",style: TextStyle(color: Colors.red),), - onPressed: () { - Get.back(); - listsLg?.removeData(callOutId,index); - }, - ), - CupertinoDialogAction( - child: const Text("取消"), - onPressed: () { - Get.back(); - }, - ), - ], ), + actions: [ + CupertinoDialogAction( + child: const Text( + "确定", + style: TextStyle(color: Colors.red), + ), + onPressed: () { + Get.back(); + listsLg?.removeData(callOutId, index); + }, + ), + CupertinoDialogAction( + child: const Text("取消"), + onPressed: () { + Get.back(); + }, + ), + ], ), + ), isScrollControlled: true, enableDrag: false, - ); } } diff --git a/circle_app/lib/app/visitorlist/view.dart b/circle_app/lib/app/visitorlist/view.dart index 6670ebf..59f0dae 100644 --- a/circle_app/lib/app/visitorlist/view.dart +++ b/circle_app/lib/app/visitorlist/view.dart @@ -108,30 +108,29 @@ class VisitorlistPage extends StatelessWidget { // Placeholder image ], ), - SizedBox(height: 8.sp), - Container( - width: 150.sp, + SizedBox( + width: 200.sp, child: Text( item.user.signature, - style: TextStyle(fontSize: 12.sp, color: Color(0xFFB7BECC)), + overflow: TextOverflow.ellipsis, // 超出部分使用省略号表示 + maxLines: 1, + style: TextStyle(fontSize: 12.sp, color: const Color(0xFFB7BECC)), ), ), ], ), // Pla - Spacer(), + const Spacer(), GestureDetector(onTap: (){ pushChatPage(item.user.id.toString(),item.accountId, item.user.nickname); - - }, child: Container( width: 60.sp, height: 28.sp, decoration: BoxDecoration( - color: Color(0xFFFF4D7C), - borderRadius: BorderRadius.circular(14), + color: const Color(0xFFFF4D7C), + borderRadius: BorderRadius.circular(14.sp), ), child: Center( child: Text("私聊", style: TextStyle(fontSize: 14.sp, color: Colors.white)), diff --git a/circle_app/lib/main.dart b/circle_app/lib/main.dart index b94f53d..8c4a5c0 100644 --- a/circle_app/lib/main.dart +++ b/circle_app/lib/main.dart @@ -25,6 +25,12 @@ void main() { runApp(const MyApp()); } +int IMsdkAppID = 1400799631; + +String iOSAPPid = ""; + + + //登录IM loginIM(String userId,String sig) async { @@ -210,7 +216,7 @@ class _MyAppState extends State { initIM() { coreInstance.init( sdkAppID: - 1400799631, // Replace 0 with the SDKAppID of your IM application when integrating + IMsdkAppID, // Replace 0 with the SDKAppID of your IM application when integrating // language: LanguageEnum.en, // 界面语言配置,若不配置,则跟随系统语言 loglevel: LogLevelEnum.V2TIM_LOG_DEBUG, onTUIKitCallbackListener: (TIMCallback callbackValue) { diff --git a/circle_app/lib/network/api.dart b/circle_app/lib/network/api.dart index 9adf271..715ea30 100644 --- a/circle_app/lib/network/api.dart +++ b/circle_app/lib/network/api.dart @@ -60,6 +60,10 @@ class Api { + + //版本信息 + static const APP_VERSION = 'user-service/app/version'; + //入圈出圈 static const outCrrcle = 'up-service/interest/'; diff --git a/circle_app/lib/network/dio_manager.dart b/circle_app/lib/network/dio_manager.dart index 5d1b6d2..0612d96 100644 --- a/circle_app/lib/network/dio_manager.dart +++ b/circle_app/lib/network/dio_manager.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:circle_app/util/util.dart'; import 'package:dio/dio.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import '../util/device.dart'; import 'api.dart'; @@ -347,3 +348,5 @@ class QnTokenData { ); } } + +