From 89e2d1008930a9982ea2ed835dccac22e1c8c136 Mon Sep 17 00:00:00 2001 From: CYH <13923927013@163.com> Date: Wed, 14 Jun 2023 16:24:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=96=8A=E8=AF=9DUI=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- circle_app/assets/images/circle/check.png | Bin 0 -> 3904 bytes circle_app/assets/images/circle/line.png | Bin 0 -> 4022 bytes circle_app/assets/images/circle/photo.png | Bin 0 -> 7839 bytes circle_app/assets/images/circle/push.png | Bin 0 -> 7219 bytes circle_app/assets/images/circle/uncheck.png | Bin 0 -> 1820 bytes circle_app/assets/images/circle/video.png | Bin 0 -> 8105 bytes circle_app/lib/app/call_out/logic.dart | 3 + circle_app/lib/app/call_out/view.dart | 162 ++++++- circle_app/lib/app/circle/view.dart | 429 ++++++++++-------- circle_app/lib/app/home/logic.dart | 2 +- circle_app/lib/app/home/view.dart | 37 +- .../lib/app/login/complete_material/view.dart | 14 +- circle_app/lib/app/msg/view.dart | 92 ++-- circle_app/lib/components/my_app_bar.dart | 13 +- circle_app/lib/router/app_pages.dart | 7 + circle_app/lib/router/app_routers.dart | 1 + 16 files changed, 502 insertions(+), 258 deletions(-) create mode 100644 circle_app/assets/images/circle/check.png create mode 100644 circle_app/assets/images/circle/line.png create mode 100644 circle_app/assets/images/circle/photo.png create mode 100644 circle_app/assets/images/circle/push.png create mode 100644 circle_app/assets/images/circle/uncheck.png create mode 100644 circle_app/assets/images/circle/video.png diff --git a/circle_app/assets/images/circle/check.png b/circle_app/assets/images/circle/check.png new file mode 100644 index 0000000000000000000000000000000000000000..d18a60fc69854026d9e50f8337a356b84282d453 GIT binary patch literal 3904 zcmV-G55MqPx@`bk7VRA@u(T6=Vq)wTcaeZFsIG9jQ~HK;t&B}N3fixw6s=(3i3^-@Hu6|_=n zp(<#o4-kCRTj$nRkcV0&Ao5W0RYCCqqTH@!u_#qR?y`!t>Jyj% zf&ntgBqaEU_sbudHFLgm_V4W9K4-rO-?E3kWq9%bfZJW;svdwM01+gUu_Az#h}}A* zDx@0J#p3~hG+uixi9v(1?Jh&32|G-~#i{HW0qcpX7{JWOfpCl{dc!l+cu@_4IwGne z(GLXrwh_DzLmQLZwrxb8KI!%b-@brVW1W(Awi3=$(h?|&$uJ;JYz_ay1r<<2_*tE% z-6wM25y+}j{T?V%P%JT7Z+1-=s%|gf?E<*u!h|jeIUN8kjQ?>?2NbjlH^vQvvOpcnzQ!Db~|AW^eA6YNgMQmM?R zM;(7i9{onTMwrX+9FWHJ7r&JuS_UpJA^{&hPJ12H$#@b-#xPNV1Vxb?ss>j`dH@Q zkuevzomFc=On_rj%2sXd;Z1JMdaVL{{Ptj_FrAYFs37Ax0k(q8*!PaXDh^0dHvqv)vFPbsMTm zN;E%X&DC%9qfAQ+bj0r`ZqZ28$O2`W0Fj29T~u|%>wW$IYHrPD0S|axizA-hLO?HP zw#*C>`;RmGdHoX|WUqy8P(qcTdCR^8HWe!3oHVHDj;Lq)zjOla$v014z@wL|*-Ha92*DpjsMN@el2dj66?<%Mb*)s}V@N{4eG|TMc;lE7~pX z1=|S}2RnC9 zp(sz)v~6(tA3ma($FKN?>^9#fI%>bLQRWfRWvT*>8fY?@`+S9eO~HUiuGhnZD5}M} zQ!sq31{@6fb4BdkL#e$&*Bbtk4mK?7R5c#nn8qMoi=uU>QELA=n$+;f7t%8|61i5h z7Gw+{cJ-Q5yitV;@J);xu|8NuY|eC^7<*1;nfJ`e=GQF(9&x8ey#aOy3BKbz8ICYA zN%USb{F^(dI_=TE*0*bw^cYq;vo7X6yFZXoFKSQE!v{gCo|Qy9SN+g*ZxQf$&t*@s z9z6q~6B|QnW%J5^HQ)axwC2`4a+eOZ#;$^Ax`r;TSi7r>@6tvGJm>y7yO}(1pwlvd zT2lS#*XpnQ7#7>4xFn0qB1~OA!h~2Fo_zpcx={VEjJB=DL z6Z@uV$F9-NUSQXPsG>gO@{S+nA1wLz_RA?1vT=jo(4oq9l`?fz&22o1R8v$(Z9LB3 zkZ+C)SL@-P4b~HJzc7>(dC`OU@zS%u_PqAd@c1?Q9ZJdH2`J4a)Z{7K&0KI_6UTcY zg12SNu#H-7NH&1c6%zWh&S%WlNpRAp!LfffH|MxzJB$7J5i7~?>0uK$cOpx%i%mEr(rg0k{7aNyOKxS{TnD z2$DVL|17?vNx+p4C40qVv2B@J8+t2NBys1s{Eql9o(z_PX*_@olvXc0n+wi7G#2#d zPiZ+j8WX~+C){k2K>ck02S>E5*~W8S^^m;@$_Y`6XxyMKmFitJwrFpDZ68WcU7YL{ z?Ht>dt`jgZEF^K;Mfm|=xmq<{D=q^a1{V;SU&`j{#F)b4GDMaQF7re zV;4oU!xo&~I6;X1`e zN7X6!2Tw&J=B#YSWluGv5M^cltnsF@5PDBroE>HjKTYm5cGqCIXEA5SW5BW_%oh--`R};(- zXEW|`>VdUS{BE*;ZgZe-oZmp>99RaEs11U+={MsddZ&;L+kcGnBaQ?X5$Q!v0jj7| zN*#C0#NtnywBcLkX}2`lO$6$lOE$||7;|o7BGu&+ATdizV?NdqQ0{2tu0NNlCYAZg z8gq3baUi|#xK+!Oo_&+pcrK)?ufSAiDLeE(u4+Av8)Qq|t1;BsKY{q{T$HCfBbEo; za0PwdB;Z?b)sk#X*MM+xI2^jg^Z1nOFQ+e>+wrPdS{elQ$*5$Z`rk6kkBKeqEA7o!f7p6J9CvoePY5NIHdQI8?_wJ4Iu3r z(%*p<2_(+_F1?{`G;XYjSyft!taB|L(-_v;Wm`M#>qi_AJj|VKrvRAi7!i#y(rJ6i zHPgMth1k@+)3h`u`T{c@@9uq<W*Wm9VYT7x&@r>xPUFUM z&6#5_jrhDUlg_b>2v<*?X6|S_<^aHV%*>tv<&^})U6#^X-F(#zTyS{!%rq?xlJ?1% zF+);84p@Cv$P%%q$n8E-I^XsJsAMm(l;O{(|gKYV?cwWRH}lk`Z==+hq25a-~9=Yex5a#c5{+aMjy^dGUH zeKhOlU;G>GB_-IFbv3WtlAp_G@AtUku6?@*noRL5OxU}O;mKB9q~Zb1;8{;2(~^nOapD+~Po6eX=vt5NB3d(OrRO&l>nx`_b3|zxPJ%Bcz+4 zC~;A<#|$rxu488&c)R3H)82o*&W`xF#$7X{3?W&tEy9x%iPlvJ|7Wyz(XVg`0Ttrm zrar4^OKY{)-1y}Qjil3ZpAh}baXI2Mf~?FLH^WS8>b>Rwck``oRn-#bMzEu{#n21q zP@5|6?Fq8+Tn|puVTSQy==9`FrZzC#>!KN7$G|NfS`7nMOwpT^G~xOg*bs@zR^RfE z&bfoObrgWs%=`FM?PXP7X691KosL4Fn{@|%KW0VKodL}j)1I2HC6d-RRkf#!#*Hhc zS^M%iUCl6RCAC`vq>!5Gxc^zHypRUi+~uVvi?S8@7RwVM10hcH{zjxTX0E z0=(%`^}iI{4nk$lRONn~@rVd+I`v^{*9zlHV|B2FOfZHgIbm(R zkLqeIflAdW515W?TXG1Ok5+SR1m}~;gQ0W0w`0_O)*2}O>PM(@&@$Ry$d2b5vuU*U zv_`9xa2kk;>$}oIn{~KJ=u)pU9vE~_>r%+A)^LM>ubr>XjvghVW1+;k7?jj7kw-u} z(9H~87z01O8_0AoM%}Im?EV6}4J_aNX^i}%BB?l{9xzf!FOPcky^M9?bnalP@40n1 z#C8(CWYA;OZ1YOKjchYuH{t8!v{;h31|rj=hT~~R^ZH&y*A*RQ!1>Tt^c@J^Vne%0 z@QIS7T-%7MxW@6r04f8~(M0GUH9$syz{SkM%M#x*c#U^9CmO5 zbp)zW;IY_Om{zv#z}AJ>Q^xY8}Wed64<4D%9v2%GsR;j2iVa) zlXD(EP~amaeUAu#hsc&b&+S{tZY#k3-|G;-jThPUef7H>i6XLJ#WK{%L=+x-V5CwI zFD5pC6cbWk6(dt#gCwo{x|Z8sAlvMCbc6thdd?2l@Sz6O(t6)I!2buxxhtl|J|Fx5 O0000*GedWjtJG?Jf3FQFIkQ8~DLa8+Egos^`kwA$U7 zX*Poo1W1rQ8>&Xl20;)6fAKYTNGT29e@_E(dhvo1|0Iv}`ZW!I=jT74RvOZqH~IZL z{{6teuik6xM;i)<4W<1|!y~8bVP4x{I#b#w z{$21p^BlSEQF*7x{dz!jbAwLtkDr@uE}IXm5AE`AQ&1Z8je&XiIdk0&*F7+O3;S~>Y%(9-qvq*Y>7>kPGe8#8C$KQj zG?_s&{}JN@Ij#>O<@_>m{Z#4TvFeaH&Ux&j@=Pu-ZL2iku&qKXJW* zWuzfLApUjN6$PilOXW%+ZwiOFvk=zI79XDCm5ObNYWBmwhOXERZ zdl%bUf2n=%Z20rnuR zD}tOJHZEpgvo$Za1bqs>)|ECW_odO5x;;_#h-NU>f!CqfQsnzFRXNzGRo7evW619| zE{*Nl_D;?-k-22sm|O@BAwRXzGX4o|YS{w%B08o2BOg2ob(Wl$3WMe`E~D06Tsvia z@?6&gs>&3d)n1S#dB?zY2GI+4gguo{`e5Vj`lnqg{VzI3S$B|^?U3!YO2V6EHns?~ zvXxV^j%Dc=)Qc+1>7rv&BTVIz@>XOQ`{-?z$t$RbVIzn2+7HP5h zUUevYMWiwxtm%@kqNy0d_8==X{eo+o|0Uy-eG6sQhc+eu5@C}~9dn%z#q>m(78mL# zSUQ;>wSUfjOSPRm+6S?{*0rbY zwMA!VgCf)G#dS8DdZy6W>gLBwXs$gFq>aJZPus*^&3DCwGZbg(ibvm*vu}6Yk?CsZ zU~)2w9;&<9&H5x~2EUiPiOPU(v-Zo*6>|Oe=UTb2%$Z-#cD+X|+Lqn1naC!~+J0J2^CTrD?izdhhAFgXV+>!bHsCPHq3GdU#?n=^*m#KX;8swGxrRrp? z)(o#Xxg+y@N_O8JB8%9xXDP}}XS;WruA--0&Rqq)f5$=Q%@DP1u-$QfyUlFy1tNTu zAp4a(t-Y|6^D}|3h*sI+cW{2gdv|e0_!(7()Y(;kqL_*Ecg%OT%RbRY`Ftwv!2!C{ zHZ+-E6ydw6g9KlzI7`eha~tPQ-aM}NnWLjkd$#9}$9SJ<(?-kKUu6GhFh6nPI_5@- zjEx&p_FFF=vKxBMHexz_)vc8?{o{4!gFg%3_933?^NL-Ozg_G38T-!vX8IZX%R7Ev zDgA8Q^4@+@UzX|c)6ZS`%`WHR)1PzxtH7BcY1`N5&)fIG-42HrFH-2im~R=3d0B5 zxYh}2e_jEXj~{tWE4U()75VFy|Dfetp8SbH8%%gCfC9?6B)|+WGAy2>E;w6U2FR3j zl)c_)2V2im|BMJ?n|b>N8| zyrQ!ndM3xfB(Jma;pr~}BG0wo12R5&a0dF!a|K&Whv7v1=s+B4-@O}fgUjKpz)5ky z9iU^F3fnw1K#cOD?x>fof)vf#H+R8mocmFAi7jY?Iv!uJR4%=-?Z=qCX^Fur}WCwY)c z-@U`FsR2xsumV&}nMIxc0#daLuW>jFt8o0EcS-rHv@SbO8mqQ;Vd*<=IJzP@05aB&oNoZc?7ro`6g6N|%v*$f$bmfN5gX{aeF8LG(>7I4|B-8)vdo?z zqUFAIrXOzrHcZZrj^BV2J`@k z*ay9--XpEerkzlM9I`K!O1IYn^oy;k$=aqpj6F!owFNXZA z@6!oT#se(oBc9?jK*s9$GWqz={;2t&1(?AL`=-c)hF5lR3m{|lEfC=$7aSa)m=pjF z12PC=*i99TLGpkM^6%D^{AoCI8S1Wep;*`@LsFoOi2Uuf+2UvvJC49G~Z#^<>l zGy`Vv1Pwrp;R{z6Ok=#^YsMY^1>E7H%6|Ju^FQ%Vff-;Kcp4yM$$*(3f28#68ABwm z7$SL=%f9`V(n|$WJSby$%kvl59_*TgjheCJL65XPI>sYBBK$QarY8er42-e#L&pzr z#sC>SzhTlhT4aFCl^W+WeSS?9ka^=oS(FR_nJ<8V-6`^nf_qUw!FU=zX9@Wdo}thD|4+OYs_uc#m14Uln^yua z0xg$37F*2Vj9*+$dQh zD%ix17A?c|cDgCr24-N$=)j15_iWlauKRh=|D+ zjn7BR^a(neb3eGK86j-+3y;4%Ip=Ugr<3U{IyolL48$S#+?ZVL-|Qo5=KKRt<0EMd zkO9kL7i7M);PO=fA+wi)ALZ+li@In)mDpYsm+^i;MlPlnH4-vFBYd&@y5>^3sJh4x zwCAHo7WZ{EDW5nR+E;)vbPA9m=O{1Lfskkq2mDyx01guoz1Lv$sO_qqcrA;bvZPa+YP+J7xOnUX~bsM9OI;Oe@kf;wVC$Zs59@6?ag=1T@GLy2an z>t&Jo=>Z`h`LmS$Vkl7;OXXQSKdt-ML=HLoSX7qTcjdGS_EqZ1+*tB_slb+k4JEo` z>E@;C74%EJIKU(kRe6lO&h1>6b_V6KIhI15GvcKBa29K~%E@--xlFMGUiu9(11n|U zv~ke>ul9gG1rJR56rGK_@}T1_Yb+>0i!`mp^xu7bFV8 zWQ=vLC5yNlWelo5L$PrIPD=EpoDK-kb$GwfWUP_`&ieSc1WrJNC=Z9UvoJV1K>Py8SxH1eRCr#^T?w#eMRorA-hX?`3^R`z#u;!B7-8513?!fu5fB$dOA$m+BgQf@ zDaw?kiG4HiTtXi&fi3?e8qZ{B-_#C9pTQ3(!59{X5hY_^7@U8MB zDe)c%oX}}tT~V3|m1?ju9P^TeN(~DD>c2fph?fi@))f#36c8^gfESD)gprnngdhp3 zXG%Z`SO4G2%?R5}Lu!eSk-3|#>ZB@psh(?}L30##HC5l{Q366_dR!SA$k9TtJNqnh z+)+N(xb**GGP057;<_=t!fb zR=9d4)noz%G=kUHoc1cA7!~uPwNE7>x<#;U*h(n@nq}cyWBb!X5N_ej>XG>{i(w0w zu8~?b-M>}iU~!rCkes!J$#i>T3=&zR zfwCC=_i$94vT0)7FKMi9)EAvCR}T94Zl2?yLTTQvew48K0QM=7pV&oqd>>+M0TcqT zFeI`FHwg|B&n8XQ6S6|p|1WK0E`Rm6y6!OCLQrZ^-8CyfZXcv1p?Rh8pN+ZEYGc^% zJ-q#2d&hp_oPD)syWwqmtNdyPoVr^ySxvGdk)O4I{P-R)X{Es&l`&mwwpvS#wx|)& zb)(JHhHJi^x$cii!J52Q>=@8VwaEksq7%+Cc&>f~A1l)aZFy<0nl*Bao|E6aV6Rmt zxK^7^muCX_91L3S{6{^wC6OIIMDx7ukew1jX|UEp=GfF&)xXIM9RhppG=gFbgC?Y% zp@9%%%0|I7g41^~1##;_&eA$hJq9C&cs$_EhC!TFx9=NJC>ah<%}J z=f8+8Kc&o$(&+xlL2_ps^%uZO+94|kIqH{R96Y(|-QxT+hbWawWPL~%pa(rxu znZ^hZGbNgTGKcKY0Wh)-jbSAVE6f16`8ygxX3#|npRm~aZ;rS zgh9Ukj`MJ4Htsv(%WN#1!cERU$w@9SK`Q}H76>zSKWd^1n>mnLQ`Xq7HI(?b=fT9coi$l5PVJMpoRqH* znBoZ7!4e}qnl0Jj#yLl35m~c|VmP>63Hm2OVB?Y_KnY|A6li~V8_-}q1}w`n3>QYn zrdIorb>E&oVnK+BiFQAwHVKzlfvc>HOZTnWbb1d$t4Op2ReT- zi+n=?Nx20ZjTr~UQkX0eM@}oH#NHkZHRHJ=vN6ZZY-38?P-CsdHhoEpWcnf73X>kwW?W^{=6nYYmK25Byr1hOW@{%137 zR+zR^GCi{PcpHkxBV4h`J%(6hP2Z}*2of77+Bj;ejlJ6qN86trj_}j&0N>r-(@PS^ zCvNSXi?O>dG#NGp$FJ=(>!G75G4b9xP*ph22coxD}C-v zXZD^WrrJ1R#UvV4;-p*rtUJIh&&~&HHOA*JX(VYumq6ptAtwHO4pQMVk1*L5PvFo3 zl?$!Uhr>L~4zi$Zfw=bhWPI$Xj21Izn92;tk+B43nmNv0yZFBHH@9|ipVe&t>}WiU z9dc<0+<6|{-Vug z^QelTWfz$I(|I(H7o^IPzu~!~lVLhw~#Y&&TC4dIU6&>tph)uH7l&xn3fbc6?)S z*Uf-)P1@b&!nO{}YX|upRvN&~D)5(an}pn`f9seiR%vGf@7i}7Qw=hU>b**~cRjs; zhh~Q%#Y;Yhs+%a45IF!Vhrk&w`^YS^J?xDXd~u=H&>514+Ds*f?={n2tAUCNKc(mK z@hUq`)PU$`Bt0jSNW5<-fprr(-n91=+IiJ0s>k2^bQcdiH_%SAHXfkoj#D}|HY4Z} z(AZF5`u%e{)V8}(cIU|(Oi+ErHcH7`5WVrVis3OC19OPc8YTnvMPS#ncdAYx_dwJx z-jlR+w9^ncW~PlpSGF`}tF`?3Y=Q4S)5UWG!!*n?aIYH10i;yiDF;zL(>5(=IRK{L z-9__|p{Zizv8U4-USY@_0Z*|Bvjgt*B%l|Rc4ib!O`1)}6e$`V@`W*RYLM+cx&#l~ zI3NmSz@N><3yGr5LKST)$Ez8PgeqNZXh%snWhY;)s`O1LHi&q0kkTY)C?+J9e_+lO z96A-EI9^BX_Oi#u_}NZKwunU!QAKWU;fThB_O2dRlmdHAWLVY7F)T~`a<0TsmM+lH zLkeIkQeUrrOh&9&GN>(yI3^7%1pyp(xW90Fmju9;afXP+Ss}!xw@BGMsKC@)7a*d5 zDX6M)QC5`lPwZI578m5zX<}CGm6e{ju8o(>v|N~fC*+D8JzUYP zW7oED+?p!g>W?Hg|JU|}XcB4@8c86upo5tIr^dz?uCD#KdDl2+apBvfoH~60t%F8( zx57M$YRt$X@FH)$n-TL@cag0WqhzkVE%j26vb>eyoQ+dx)&vkgeQt=`f6+xNCkRT* z(CxIinrD^>;~vZU1lkO?-at3z^W^b^%4xeD8HyE%?bN^7`T*6s5IE9@noXTZtpJ2-GMb!F{jjx#n+j)w*Sk8LaPwMV;9459KNOl63tFI5(oQ#3m{H^;~eE=AZpLBMHb zEOde<^{l`9U?KN7cL8P3E|;Y%j-olbZ3C* z)Z2c(fXB9uY}U>8X(!)QJO=;CGQqJXEg2vBR|J<|-~ZFo%;?aMUkKoVecvj$E_!Qf!qBy7c~e zF~#q<>Blk(p;kJxWx$p<>j;JX3M=b!DN8qW;&_hmTk9uvwXz8uC&d|bQ9yj^vYwnc zdH^{xNhHI285oh{vk!K)ldK@zqK=tb06XR;u4j8q=6LhL6KLj(qDIi*fh_}k`|$x3 zwwn?I>$DB#xo9LcUv>PV|7a84hnl)+b6tVXVMAn-;qfvr79wA!UlK?7T>G7i8yrKh z#qoUZ65=0kT#(K6BU3OQe>iM7I|{>4cMG@C_;0&zDz$L(h7LB&@S?q?30zUZuROGX zr{~H_9@@cNO;>aO-a+@F283N)sZtKBN-TeM7x{7>9tM%Ng9W-A%{`bN^J{if$B)9U zoL0VzZ=ILTy-L5El5hs0mPE(GC<3Hvke1g8`1;R!I^8+$ zzH#BxXnM>qRU= zj|6^m9rBtCcboM8WM8g)+?(Xio)xuBL|p1YN-DX zKD^j8S%pjtAz~yE;nCP|$v3T_6WDC@HL>A4CV~l+LX}%V;^d8O9I$%F9bny}sIr0E ze$>ZP3_^l&3SjR3Hs&An4shH8mwjOM84KPqvc@SNpO#6TtSls7a_^j37QK3e$$W+Q zKAp#0o(~VQbB?J1Wht@Wss>(vczbs!a?r;k&lI@pCw=o00E^Lj4!K1C$sAk1(Mf4Y z?Km2Hlvt@Cq`@GBT91PiPK7J^Z?C=Ll6&S<+S|(7az7?;a&cjycZefYw9U^asf4;p zqW{s$C(y2|z1l_b-+X@$Pi?bwkCn(idwU0??MsU~`4E;JHNfOShJu8JF?`326whd9 zumKyrk%4d0ic9aF_i$gwg_kN2cE8fJR~_8K!RvM(WW>Xm>y^0SJH227wfD;$v;WZ! z>bRFW{Cuj!%t?I+b>g>@L}$H_qNXsU27<+CG(4NFJvu8)sX#^2Ihw&J3)*KU z$EioPms}OJRAI#J9(=sOy+0Y~65MhG{N~OHjJ8M4X^EXH$2qZIftAM(P!8AxV;>%q zZp*l|jM*j?cV*(TuPcqV0AX=D%mO(Gw^i)Hrl3Cp%gA*jmw3$)ZS1q>4#wF_6bNtD zA4=SEUmwqPODz1nfo(r%xd?D4y3>}h^0+=G_8nDONW~ecCnTbj=s28)q08=AU;%#} z{fcbFIR~DqGZ)p0zG!uh*S>V|Lc*O9MCzW0pBmww`-b@S*E%}|8F8Qaq{OO|dJxSz ze!=c=O?;VJc<#aAxVY?V3nmN5JZlhpP_i!Oh7~L_yUEiXfw#P@jmh@z;mk{042kQn zlz8O(8M57EMAHWrm{wH*q_o`e5!f;krkh1vJAjVOw=ekZ?wHQh{o6R)3Vj-lfK&gV zh4rg<(`=U}W!>tzXMv0V8pw8>Y$Ttegtq$R9+Y-_Y4gZ1mO-R>{5B=3%Wv=6l9G6v zf_vGhKG>}?!zkqdSLHb6=oT8kdpYaD-g67^jaz}nu1ESBf;wwPn0eX2W%u0a1D;4r zDPtlXATGbn2-~TbaWiM9YIpIW;_fZ z70Cej!MA{a`(omKAUoM_)|OcPvH^n-roz6=D&-yRHR~j`pjm?3mlF7P1j%uVgTP-o z()Yfxv)k}-CuQPpyXup`-Bh)6yR@Wo$=Jpw_*^4V~GJ>wp z6Ge4Vk!Mv7@b?aG;Fv@H?;^k*75uNB04})@$aj;k$XXI>jvpY?bdS>uAE2b5n!ijy zT=A8jLtgg}mrZ!h^yB>BcK=bG;ZX`joZ8LU$#K}AgJ1JglHZz=gN)r>E=a-;+ zU10Oy0b8G`+2dSPyuN|TQ?EFv!14n|CLl@_)4C)cC8StIfmX{a|HTSgwXE5sbex$} zMf)&C<=*zX*7Hu#N=!fe9&qdRDqXt+QcW~ff?j!Wfn_Qzj}@-&RU@v3#0X7X`6VN0 zxAEvapIJG6a+MdC5FH#0CC)mni51KK|7cyE7?n^q|1F>}yHfSJ1F~0wo;iGoskNqT zu6nkSpn|O0XXA)zh^zj&?=e~n-{1zXVKCjW7~SPvfnfn0|NBiG^5W;8pw*~%#| zcijx!b2HH18OJDr&WyyW!-wXDhgRu~rIXc%Y8c3X+FbpGzG=_Hct+s}F8pgF+0k3( zgkQ8zhLisA`9tyeWV`dgHJ=84y)zM`0QNepKzl}Q1~@qz`%axOu}z%bS_~Ige~zF- z>v6Rb-Car?Zwj6S9J(>b(MRUbo4|z&ThYBcZmdpkoCT`stvaZ{s1Ag;cCKyN~2^=yeVziveF?uEy0<=qcFAjgY0WO%`v=NH{m!@u$qz~hfB z!7*mQ`;?eiQKD3bTW$Rc6&M;Fv$38|gV@?d;@Hual(^=)L6}rxc~@c<+7&YS zn*I~-wzGNdW)tXi1XisQnCM6}n^7^XTN^|A{VCdLfdePZ>{d-%9qz5XdMII$`Zo2J z8HuO201rJNkm)xo_zx9fsz9vK1}0|I|D}5gZScl0Yxw-+Z>64$`#Z|xUwhq9x}yP0 z_GF37QsQ2!cG~&-nhDX&+V0RNIIe9KW$eZP@h|?IXsY!~Sv@8lEao*= z4|KT!{~>`O!esS$e4^pe3wBV z`itxFSej3h?K;(D_f^cFt4MrEG|``qSnY-|8$4~dxgSL!IO9Kp;A#L(za9djJcUy| zrpo-Fs#__R(+K93=r2%xsRTXbMVLv`3`{Us3oo=CIUQ#-mc6~pzI($@bDSW!lXW3M z0#(8QE1p;#1f;Pk1(l1yr+a`sSbE*%!{E)p@j|%-N?0Z4Ue#W^GW_fcIa6){&g9JT z;L09k)Hbg4bYBzy=f*~ZiZ?|dh{m?A~a6Aqat2VKJuu})4eu1 za7cVVH9ntG1D{R854w@q882?g*!-u#JGJpP317~`bd{(t!+}-bA0$y5dLr z#SEM8aC*vR#i0XoySVn^VoTo2)=K_%SF#4OlK6}!8*>t5>;uyPR1Ztxp@HgInY5!y zK?1Xdh~#iAcIN{Vl@_T{2BaXGBejq3%d#BhsQjt8{xid`HX4mnN9ra24ng?)+>Dw= zr+vM0YUbt7tZ1`iZ+T#^v+#3dgCt|*1GQZ+L`yG@Qy{7tjJSvABxK}%0fI$yi{TSy z{@yAni+PVXzJMERSZd@s2EEa@#dQ}C|Gv|1e0V@V@1}c+)`z>)APS-LxfG?a|EJV1 z^7?LN1Fehd`3TNZu%@P>UKT@#_I3Y!6&WVcGV|ByQ2SW5oxi5~4AT#<*3d7PbuSAr z^LF1e(`>bJ^cTvHiz_dbC(W$IUGrUau-&hflSy>G*!|c8hfW7A^u9aG9rg45JMi@L zYl@z{-q(N70{(7R5Ve2!+ ziQ+4tm3uA>%O69CwJy}FaaMtn+9&F!6;1WH8P}MMQ(o)NBUp+Itj zoI>A7>zF)_vDhNj`3}v)MtFAE7l(*1Z<4M4^yu2Gk-yzJ#FRF1VRAK~32MSJKCwc# z@!U#fkQ@NX!e}*lkvAb+u)AcRA3=JsA4+c=qgCZUwMWQ92k<$Ha%bWvQei;6J}(m) zM&;=93)A_zdRm|R^zbBz>{d~VNk2FK-aEn{O4fw@)SHukrvf=e+Tb-Fl?55rRJ|g4 zSm0q|c$OqwZ4Gs_y-ysAY}mfUBtB!JhoO;;pD;0!b5|ngXyol#KR@&15=fL*2x}Dw zy@m3ffBdn=m!1CHaFM*X(Z(xFb;OmKp)VAPiu(f1BPrG&X$bfzH(U39f7T(hRX#m` z8*32lVJ6$u*>()#q`?X8bqOiE)+Q6k5IcY-iCknTrM&&@4`pxQ-QuG6%a!}?FTdAl zhy#Zzp=TXeT_l>?^%^&yI5$ibkXf)%WcDIKj{qhg64z9uNuL>o`%e8~;l+^w{bd+4 z8p~5}cL)n^c$tDDHPnCn0vRiSW<#JD%7mm5&m$bYIFT3^f9*%*nXNY7SVF#b*_7C`D9qbxRWdAy*7^AC zFJ78tk2l3iJfQB;CTa#8nzT24=a^&0L-MAawsnB?LPPy)74{ypc3%Am3d|LYyu56{ zh2uW&U}j^ISQ=5)3*FU!8T9Ffg&v+NOWd0aT=n(~#N8U3iA^S^KflD=si+Oq%v002ovPDHLkV1iGlCm;X- literal 0 HcmV?d00001 diff --git a/circle_app/assets/images/circle/push.png b/circle_app/assets/images/circle/push.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe2b824d7270b98f45e21f10fe71c62d4a60bf9 GIT binary patch literal 7219 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 z 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 DOML3q literal 0 HcmV?d00001 diff --git a/circle_app/lib/app/call_out/logic.dart b/circle_app/lib/app/call_out/logic.dart index 5db85af..bad07ed 100644 --- a/circle_app/lib/app/call_out/logic.dart +++ b/circle_app/lib/app/call_out/logic.dart @@ -1,7 +1,10 @@ +import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'state.dart'; class Call_outLogic extends GetxController { final Call_outState state = Call_outState(); + TextEditingController textEditingController = TextEditingController(); + bool isCheck = false; } diff --git a/circle_app/lib/app/call_out/view.dart b/circle_app/lib/app/call_out/view.dart index bca5ff2..7fb34df 100644 --- a/circle_app/lib/app/call_out/view.dart +++ b/circle_app/lib/app/call_out/view.dart @@ -1,4 +1,7 @@ +import 'package:circle_app/components/my_app_bar.dart'; +import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'logic.dart'; @@ -11,6 +14,163 @@ class Call_outPage extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(); + return GestureDetector( + onTap: () { + FocusManager.instance.primaryFocus?.unfocus(); + }, + child: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage(getBaseImage('home_back')))), + child: Scaffold( + backgroundColor: Colors.transparent, + appBar: MyAppBar( + centerTitle: '世界喊话', + actionWdiget: Image.asset( + getCircleImage('push'), + width: 54.sp, + ), + onPressed: () { + showToast('111'); + }, + ), + body: SafeArea( + child: GetBuilder(builder: (Call_outLogic controller) { + return Container( + child: Column( + children: [ + Container( + height: 45.sp, + padding: EdgeInsets.only(left: 17.sp, right: 17.sp), + child: Row( + children: [ + Text( + '选择圈子:', + style: + TextStyle(color: Colors.white, fontSize: 16.sp), + ), + Expanded(child: Container()), + Container( + padding: EdgeInsets.only(left: 7.sp, right: 7.sp), + height: 21.sp, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(21 * 0.5.sp), + gradient: const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xff0AFCFF), + Color(0xffD739EA) + ])), + child: Text( + '立即解锁', + style: TextStyle( + color: Colors.white, fontSize: 12.sp), + ), + ), + Image.asset( + getHomeImage('icon_in'), + width: 24.sp, + ), + ], + ), + ), + Image.asset( + getCircleImage('line'), + width: Get.width, + fit: BoxFit.fill, + ), + Expanded(child: Container( + padding: EdgeInsets.only(top: 15.sp), + child: Stack( + children: [ + TextField( + controller: controller.textEditingController, + onChanged: (value) { + controller.update(); + }, + style: TextStyle(color: Colors.white,fontSize: 14.0.sp), + maxLines: 32, + maxLength: 200, + decoration: InputDecoration( + hintStyle: TextStyle(color: Color.fromRGBO(255, 255, 255, 0.6),fontSize: 14.sp), + hintText: '请输入...(左下角上传图片或视频哦)', + border: InputBorder.none, + contentPadding: EdgeInsets.only(left: 17.sp,right: 17.sp), + counter: Text('') + + ), + ), + Positioned( + right: 15.sp, + bottom: 10.sp, + child: Text('${controller.textEditingController.text.length}/200',style: TextStyle(color: Colors.white,fontSize: 12.sp),)) + ], + ), + )), + Container( + padding: EdgeInsets.only(left: 17.sp,right: 17.sp), + child: Row( + children: [ + GestureDetector( + child: Image.asset( + getCircleImage('photo'), + width: 30.sp, + ), + ), + const SizedBox( + width: 16, + ), + GestureDetector( + child: Image.asset( + getCircleImage('video'), + width: 30.sp, + ), + ), + Expanded( + child: GestureDetector( + onTap: () { + controller.isCheck = !controller.isCheck; + controller.update(); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset(getCircleImage(controller.isCheck ? 'check' : 'uncheck'),width: 17.5.sp,), + SizedBox( + width: 4.sp, + ), + Text( + '使用至尊喊话', + style: TextStyle( + color: Colors.white, fontSize: 16.sp), + ) + ], + ), + ), + ), + GestureDetector( + child: Text( + '内容规范', + style: TextStyle( + color: Color(0xff00FFF4), fontSize: 14.sp), + ), + ) + ], + ), + ) + ], + ), + ); + }), + ), + )), + ); + ; } } diff --git a/circle_app/lib/app/circle/view.dart b/circle_app/lib/app/circle/view.dart index b9d42bf..92a1cf6 100644 --- a/circle_app/lib/app/circle/view.dart +++ b/circle_app/lib/app/circle/view.dart @@ -1,5 +1,4 @@ - - +import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/util.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -175,7 +174,6 @@ class CirclePage extends StatelessWidget { margin: EdgeInsets.only(left: index > 0 ? 4.sp : 0, right: 4.sp), child: Stack( children: [ - ClipRRect( borderRadius: BorderRadius.circular(10.sp), child: SizedBox( @@ -191,7 +189,7 @@ class CirclePage extends StatelessWidget { margin: EdgeInsets.only(top: 72.sp), child: ListView.builder( itemCount: 3, - itemBuilder: (context,index) { + itemBuilder: (context, index) { if (index == 0) { return Container( padding: EdgeInsets.only(left: 12.sp, right: 12.sp), @@ -199,8 +197,8 @@ class CirclePage extends StatelessWidget { decoration: BoxDecoration( image: DecorationImage( fit: BoxFit.fill, - image: - AssetImage(getCircleImage('circle_desc')))), + image: AssetImage( + getCircleImage('circle_desc')))), child: Column( children: [ Container( @@ -208,8 +206,10 @@ class CirclePage extends StatelessWidget { child: RichText( overflow: TextOverflow.fade, maxLines: 2, - text: TextSpan( - children: [descSpan, span])), + text: TextSpan(children: [ + descSpan, + span + ])), ), Container( child: Row( @@ -218,7 +218,8 @@ class CirclePage extends StatelessWidget { children: [ Container( height: 30.sp, - width: 30.0 + 15 * (widgets.length - 1), + width: 30.0 + + 15 * (widgets.length - 1), child: Stack( children: widgets, ), @@ -229,7 +230,8 @@ class CirclePage extends StatelessWidget { Text( '3.5万圈友', style: TextStyle( - color: Colors.white, fontSize: 12.sp), + color: Colors.white, + fontSize: 12.sp), ), SizedBox( width: 8.sp, @@ -254,74 +256,81 @@ class CirclePage extends StatelessWidget { }), ), ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10.sp), - topRight: Radius.circular(10.sp)), - child: Container( - padding: EdgeInsets.only(left: 12.sp, right: 12.sp), - height: 72.sp, - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage( - getCircleImage('top_circle_bg')))), - child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.network( - 'https://p3-passport.byteimg.com/img/user-avatar/eb429d4dbb3c246f580a6f7894f2b246~100x100.awebp', - width: 42.sp, - height: 42.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: [ - Text( - '圈子名称', - style: TextStyle( - color: Colors.white, - fontSize: 18.sp, - fontWeight: FontWeight.w600), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.sp), + topRight: Radius.circular(10.sp)), + child: Container( + padding: EdgeInsets.only(left: 12.sp, right: 12.sp), + height: 72.sp, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: + AssetImage(getCircleImage('top_circle_bg')))), + child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.network( + 'https://p3-passport.byteimg.com/img/user-avatar/eb429d4dbb3c246f580a6f7894f2b246~100x100.awebp', + width: 42.sp, + height: 42.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: [ + Text( + '圈子名称', + style: TextStyle( + color: Colors.white, + fontSize: 18.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + height: 4.sp, + ), + Text( + '35.6万人看过', + style: TextStyle( + color: Color(0xff03FEFB), + fontSize: 12.sp, + ), + ), + ], ), - SizedBox( - height: 4.sp, + )), + GestureDetector( + onTap: () { + Get.bottomSheet(tipWdiget(), + isScrollControlled: true, enableDrag: false); + }, + child: Image.asset( + getCircleImage('add'), + width: 77.sp, ), - Text( - '35.6万人看过', - style: TextStyle( - color: Color(0xff03FEFB), - fontSize: 12.sp, - ), - ), - ], - ), - )), - GestureDetector( - onTap: () { - Get.bottomSheet(tipWdiget(),isScrollControlled:true,enableDrag:false); - }, - child: Image.asset( - getCircleImage('add'), - width: 77.sp, - ), - ) - ], - ), - )), + ) + ], + ), + )), Positioned( - bottom: 56.sp, + bottom: 56.sp, right: 0.sp, - child: GestureDetector(child: Image.asset(getCircleImage('send_msg'),width: 60.sp,))) - + child: GestureDetector( + onTap: () { + Get.toNamed(AppRoutes.Call_out); + }, + child: Image.asset( + getCircleImage('send_msg'), + width: 60.sp, + ))) ], ))); } + ///至尊喊话 vipDynamicItem() { Text descText = Text( @@ -439,7 +448,7 @@ class CirclePage extends StatelessWidget { EdgeInsets.only(left: 6.sp, right: 6.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(9.sp), - gradient:const LinearGradient( + gradient: const LinearGradient( begin: Alignment(0.25, 0.5), end: Alignment(0.75, 0.5), colors: [ @@ -470,7 +479,7 @@ class CirclePage extends StatelessWidget { height: 100.sp, margin: EdgeInsets.only(top: 5.sp), child: GridView( - physics: const NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, //横轴三个子widget crossAxisSpacing: 8.sp, @@ -500,7 +509,7 @@ class CirclePage extends StatelessWidget { ), Container( height: 34.sp, - padding: EdgeInsets.only(left: 5.sp,right: 10.sp), + padding: EdgeInsets.only(left: 5.sp, right: 10.sp), margin: EdgeInsets.only(top: 5.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(17.sp), @@ -515,7 +524,9 @@ class CirclePage extends StatelessWidget { height: 24.sp, child: Stack(children: widgets), ), - SizedBox(width: 4.sp,), + SizedBox( + width: 4.sp, + ), Expanded( child: Text( '1位圈友已私聊', @@ -535,6 +546,7 @@ class CirclePage extends StatelessWidget { ), ); } + ///普通图文喊话 normalDynamicItem() { Text descText = Text( @@ -583,7 +595,7 @@ class CirclePage extends StatelessWidget { Container( height: 279.sp, width: Get.width, - padding: EdgeInsets.only( left: 12.sp, right: 12.sp), + padding: EdgeInsets.only(left: 12.sp, right: 12.sp), child: Column( children: [ Container( @@ -593,79 +605,79 @@ class CirclePage extends StatelessWidget { children: [ GestureDetector( child: Stack( - alignment: Alignment.center, - children: [ - Image.asset( - getCircleImage('avatar_bg'), - width: 42.sp, - ), - ClipOval( - child: Image.network( - 'https://p3-passport.byteimg.com/img/user-avatar/eb429d4dbb3c246f580a6f7894f2b246~100x100.awebp', - width: 40.sp, - height: 40.sp, - fit: BoxFit.fill, - ), - ) - ], - )), + alignment: Alignment.center, + children: [ + Image.asset( + getCircleImage('avatar_bg'), + width: 42.sp, + ), + ClipOval( + child: Image.network( + 'https://p3-passport.byteimg.com/img/user-avatar/eb429d4dbb3c246f580a6f7894f2b246~100x100.awebp', + 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( + padding: EdgeInsets.only(left: 8.sp, top: 12.sp), + alignment: Alignment.centerLeft, + height: 72.sp, + child: Column( + children: [ + Row( children: [ - Row( - children: [ - Text( - '圈子名称', - style: TextStyle( - color: Colors.white, - fontSize: 18.sp, - fontWeight: FontWeight.w600), - ), - SizedBox( - width: 8.sp, - ), - Image.asset( - getCircleImage('vip'), - width: 36.sp, - ) - ], + Text( + '圈子名称', + style: TextStyle( + color: Colors.white, + fontSize: 18.sp, + fontWeight: FontWeight.w600), ), 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: LinearGradient( - begin: Alignment(0.25, 0.5), - end: Alignment(0.75, 0.5), - colors: [ - Color(0xff8DFFF8), - Color(0xffB5D3FF) - ])), - child: Text( - '男.33.DOM.异性恋', - style: TextStyle( - color: Colors.black, - fontSize: 12.sp, - ), - ), - ) - ], + width: 8.sp, ), + 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: LinearGradient( + begin: Alignment(0.25, 0.5), + end: Alignment(0.75, 0.5), + colors: [ + Color(0xff8DFFF8), + Color(0xffB5D3FF) + ])), + child: Text( + '男.33.DOM.异性恋', + style: TextStyle( + color: Colors.black, + fontSize: 12.sp, + ), + ), + ) + ], + ), + ], + ), + )), ], ), ), @@ -682,7 +694,7 @@ class CirclePage extends StatelessWidget { crossAxisCount: 3, //横轴三个子widget crossAxisSpacing: 8.sp, childAspectRatio: 1.0 //宽高比为1时,子widget - ), + ), children: [ ClipRRect( borderRadius: BorderRadius.circular(6.sp), @@ -707,7 +719,7 @@ class CirclePage extends StatelessWidget { ), Container( height: 34.sp, - padding: EdgeInsets.only(left: 5.sp,right: 10.sp), + padding: EdgeInsets.only(left: 5.sp, right: 10.sp), margin: EdgeInsets.only(top: 5.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(17.sp), @@ -722,12 +734,14 @@ class CirclePage extends StatelessWidget { height: 24.sp, child: Stack(children: widgets), ), - SizedBox(width: 4.sp,), + SizedBox( + width: 4.sp, + ), Expanded( child: Text( - '1位圈友已私聊', - style: TextStyle(color: Colors.white, fontSize: 12.sp), - )), + '1位圈友已私聊', + style: TextStyle(color: Colors.white, fontSize: 12.sp), + )), Image.asset( getCircleImage('chat'), width: 60.sp, @@ -752,65 +766,93 @@ class CirclePage extends StatelessWidget { width: 339.sp, height: 330.sp, decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage(getCircleImage('add_tip_bg')) - ) - ), + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage(getCircleImage('add_tip_bg')))), child: Stack( alignment: Alignment.center, children: [ Positioned( - top: 5.sp, - right: 12.sp, + top: 5.sp, + right: 12.sp, child: GestureDetector( onTap: () { Get.back(); }, - child: Image.asset(getCircleImage('close'),width: 24.sp,), - )), + child: Image.asset( + getCircleImage('close'), + width: 24.sp, + ), + )), Positioned( - top: 24.sp, - child: Text('解锁圈子才能主动私聊',style: TextStyle(color: Colors.white,fontSize: 16.sp),)), - Positioned( - left: 17.sp, - top: 64.sp, - child: Text('为什么要解锁圈子?',style: TextStyle(color: Colors.white,fontSize: 16.sp),)), - Positioned( - top: 98.sp, - child:Container( - width: 339.sp, - padding: EdgeInsets.only(left: 17.sp,right: 17.sp), - child: Text('为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核,保证用户真实,避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的跨友;3、谢绝只会白嫖的猎奇人士。',style: TextStyle(color:Color.fromRGBO(247, 250, 250, 0.8),fontSize: 12.sp)), - )), + top: 24.sp, + child: Text( + '解锁圈子才能主动私聊', + style: TextStyle(color: Colors.white, fontSize: 16.sp), + )), Positioned( - bottom: 18.sp, + left: 17.sp, + top: 64.sp, + child: Text( + '为什么要解锁圈子?', + style: TextStyle(color: Colors.white, fontSize: 16.sp), + )), + Positioned( + top: 98.sp, child: Container( - width: 168.sp, - height: 42.sp, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(21.sp), - gradient: const LinearGradient( - begin: Alignment.centerLeft, - end:Alignment.centerRight, - colors: [Color(0xff0AFCFF),Color(0xffD739EA)] - ) - ), - child: Text('立即解锁',style: TextStyle(color: Colors.white,fontSize: 16.sp),), - )), + width: 339.sp, + padding: EdgeInsets.only(left: 17.sp, right: 17.sp), + child: Text( + '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核,保证用户真实,避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的跨友;3、谢绝只会白嫖的猎奇人士。', + style: TextStyle( + color: Color.fromRGBO(247, 250, 250, 0.8), + fontSize: 12.sp)), + )), Positioned( - bottom: 72.sp, + bottom: 18.sp, child: Container( - child: Row( - children: [ - Text('¥18',style: TextStyle(color: Color(0xffE845FF),fontSize: 16.sp,fontWeight: FontWeight.w600),), - SizedBox(width: 2.sp,), - Text('(原价60)',style: TextStyle(color: Colors.white70,fontSize: 16.sp,fontWeight: FontWeight.w400,decoration: TextDecoration.lineThrough, - decorationColor: Colors.white70,),), - ], - ), - )) + width: 168.sp, + height: 42.sp, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(21.sp), + gradient: const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [Color(0xff0AFCFF), Color(0xffD739EA)])), + child: Text( + '立即解锁', + style: TextStyle(color: Colors.white, fontSize: 16.sp), + ), + )), + Positioned( + bottom: 72.sp, + child: Container( + child: Row( + children: [ + Text( + '¥18', + style: TextStyle( + color: Color(0xffE845FF), + fontSize: 16.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + width: 2.sp, + ), + Text( + '(原价60)', + style: TextStyle( + color: Colors.white70, + fontSize: 16.sp, + fontWeight: FontWeight.w400, + decoration: TextDecoration.lineThrough, + decorationColor: Colors.white70, + ), + ), + ], + ), + )) ], ), ), @@ -818,4 +860,3 @@ class CirclePage extends StatelessWidget { ); } } - diff --git a/circle_app/lib/app/home/logic.dart b/circle_app/lib/app/home/logic.dart index caa3288..13da728 100644 --- a/circle_app/lib/app/home/logic.dart +++ b/circle_app/lib/app/home/logic.dart @@ -9,7 +9,7 @@ class HomeLogic extends GetxController { int currentIndex = 1; - Widget currentPage = Container(color: Colors.red,); + Widget currentPage = Container(); final HomeState state = HomeState(); String getInfo () { diff --git a/circle_app/lib/app/home/view.dart b/circle_app/lib/app/home/view.dart index 56f4687..4b240a2 100644 --- a/circle_app/lib/app/home/view.dart +++ b/circle_app/lib/app/home/view.dart @@ -1,4 +1,3 @@ - import 'package:circle_app/app/minefragment/view.dart'; import 'package:circle_app/app/circle/view.dart'; import 'package:circle_app/app/msg/view.dart'; @@ -20,7 +19,7 @@ class HomePage extends StatelessWidget { final List _tabs = [ MsgPage(), CirclePage(), -MinefragmentPage(), + MinefragmentPage(), ]; @override @@ -28,38 +27,38 @@ MinefragmentPage(), return GetBuilder(builder: (HomeLogic controller) { return GestureDetector( onTap: () { - // Get.toNamed(AppRoutes.Complete_materialPage); + // Get.toNamed(AppRoutes.Complete_materialPage); }, child: Scaffold( - // backgroundColor: Color.fromRGBO(244, 245, 245, 1.0), + // backgroundColor: Color.fromRGBO(244, 245, 245, 1.0), bottomNavigationBar: Container( height: 49.sp + MediaQuery.of(context).padding.bottom, width: Get.width, // color: Colors.red, - padding: EdgeInsets.only(left: 50.sp,right: 50.sp,top: 8.sp), + padding: EdgeInsets.only(left: 50.sp, right: 50.sp, top: 8.sp), decoration: BoxDecoration( - image:DecorationImage( - fit: BoxFit.fill, - image: AssetImage(getTabbarImage('tabbar_bg'),) - ) - ), + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage( + getTabbarImage('tabbar_bg'), + ))), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ funcItem(0, 'msg', 0 == controller.currentIndex, controller), - funcItem(1, 'circle', 1 == controller.currentIndex, controller), + funcItem( + 1, 'circle', 1 == controller.currentIndex, controller), funcItem(2, 'mine', 2 == controller.currentIndex, controller), ], ), ), - body:_tabs[controller.currentIndex] - ), + body: _tabs[controller.currentIndex]), ); }); } - funcItem(int index,String image,bool isSelected,HomeLogic controller) { + funcItem(int index, String image, bool isSelected, HomeLogic controller) { return GestureDetector( onTap: () { if (!isSelected) { @@ -67,10 +66,14 @@ MinefragmentPage(), } }, child: Container( - child: Image.asset(isSelected ? getTabbarImage(image + '_selected') : getTabbarImage(image + '_normal'),width: 34.sp,height: 34.sp,), + child: Image.asset( + isSelected + ? getTabbarImage(image + '_selected') + : getTabbarImage(image + '_normal'), + width: 34.sp, + height: 34.sp, + ), ), ); } - } - diff --git a/circle_app/lib/app/login/complete_material/view.dart b/circle_app/lib/app/login/complete_material/view.dart index eee6559..646dbfa 100644 --- a/circle_app/lib/app/login/complete_material/view.dart +++ b/circle_app/lib/app/login/complete_material/view.dart @@ -14,14 +14,14 @@ class Complete_materialPage extends StatelessWidget { return GetBuilder(builder: (Complete_materialLogic controller) { return Stack( children: [ - Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - child: Image.asset( - getBaseImage('bg'), - fit: BoxFit.fill, + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + child: Image.asset( + getBaseImage('bg'), + fit: BoxFit.fill, + ), ), - ), Scaffold( appBar: MyAppBar( centerTitle: '完善您的个人形象', diff --git a/circle_app/lib/app/msg/view.dart b/circle_app/lib/app/msg/view.dart index 3b1ea33..364fcfc 100644 --- a/circle_app/lib/app/msg/view.dart +++ b/circle_app/lib/app/msg/view.dart @@ -18,15 +18,11 @@ class MsgPage extends StatelessWidget { image: DecorationImage( fit: BoxFit.fill, image: AssetImage(getBaseImage('home_back')))), - // child: Image.asset( - // getBaseImage('bg'), - // fit: BoxFit.fill, - // ), child: Scaffold( backgroundColor: Colors.transparent, body: SafeArea( - child:GetBuilder(builder: (MsgLogic controller) { - return Container( + child: GetBuilder(builder: (MsgLogic controller) { + return Container( child: Column( children: [ navigatorItem(), @@ -88,33 +84,46 @@ class MsgPage extends StatelessWidget { ), ); } + tipWidget() { return Container( - margin: EdgeInsets.only(top: 18.sp,bottom: 15.sp), - padding: EdgeInsets.only(left: 16.sp,right: 18.sp), + margin: EdgeInsets.only(top: 18.sp, bottom: 15.sp), + padding: EdgeInsets.only(left: 16.sp, right: 18.sp), width: Get.width, height: 20, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('想要聊天的圈友',style: TextStyle(color: Colors.white,fontSize: 16.sp,fontWeight: FontWeight.w500),), + Text( + '想要聊天的圈友', + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w500), + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ShaderMask( shaderCallback: (Rect bounds) { return const LinearGradient( - begin:Alignment.centerRight, + begin: Alignment.centerRight, end: Alignment.centerLeft, colors: [Color(0xff71F3F2), Color(0xffF657FF)], ).createShader(Offset.zero & bounds.size); }, - child:Text( + child: Text( 'n人等您聊', - style: TextStyle(fontSize: 16.sp,fontWeight: FontWeight.w600,color: Colors.white), + style: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.w600, + color: Colors.white), ), ), - Image.asset(getMsgImage('msg_arr'),width: 24.sp,) + Image.asset( + getMsgImage('msg_arr'), + width: 24.sp, + ) ], ) ], @@ -124,26 +133,33 @@ class MsgPage extends StatelessWidget { reconmandWidget() { return Container( - padding: EdgeInsets.only(left: 16.sp,right: 18.sp), + padding: EdgeInsets.only(left: 16.sp, right: 18.sp), width: Get.width, child: Row( children: [ Container( child: Column( children: [ - Image.asset(getMsgImage('msg_first'), width: 50.sp,), - SizedBox(height: 4.sp,), - Text('抢占第一', - style: TextStyle(color: Colors.white, fontSize: 12.sp),), - + Image.asset( + getMsgImage('msg_first'), + width: 50.sp, + ), + SizedBox( + height: 4.sp, + ), + Text( + '抢占第一', + style: TextStyle(color: Colors.white, fontSize: 12.sp), + ), ], ), ), - Expanded(child: SingleChildScrollView( + Expanded( + child: SingleChildScrollView( scrollDirection: Axis.horizontal, - child:Container( + child: Container( // width: 50.sp * 10, - child: Row( + child: Row( children: [ peopleWidget(), peopleWidget(), @@ -163,17 +179,25 @@ class MsgPage extends StatelessWidget { ), ); } - peopleWidget() { - return Container( - margin: EdgeInsets.only(left: 18.sp), - child: Column( - children: [ - Image.asset(getMsgImage('msg_first'),width: 50.sp,), - SizedBox(height: 4.sp,), - Text('抢占第一',style: TextStyle(color: Colors.white,fontSize: 12.sp),), - ], - ), - ); - } + peopleWidget() { + return Container( + margin: EdgeInsets.only(left: 18.sp), + child: Column( + children: [ + Image.asset( + getMsgImage('msg_first'), + width: 50.sp, + ), + SizedBox( + height: 4.sp, + ), + Text( + '抢占第一', + style: TextStyle(color: Colors.white, fontSize: 12.sp), + ), + ], + ), + ); + } } diff --git a/circle_app/lib/components/my_app_bar.dart b/circle_app/lib/components/my_app_bar.dart index ed40920..9f52a30 100644 --- a/circle_app/lib/components/my_app_bar.dart +++ b/circle_app/lib/components/my_app_bar.dart @@ -11,7 +11,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { this.backgroundColor, this.title = '', this.centerTitle = '', - this.actionName = '', + this.actionWdiget, this.backImg = 'assets/images/navigator/back.png', this.backImgColor, this.onPressed, @@ -25,7 +25,7 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { final String centerTitle; final String backImg; final Color? backImgColor; - final String actionName; + final Widget? actionWdiget; final VoidCallback? onPressed; final bool isBack; final bool isDiyBack; @@ -38,7 +38,10 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { final SystemUiOverlayStyle overlayStyle = ThemeData.estimateBrightnessForColor(bgColor) == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark; - final Widget action = Container(); + final Widget action = actionWdiget == null ? Container() : GestureDetector( + onTap: onPressed, + child: actionWdiget, + ); final Widget back = isBack ? IconButton( onPressed: () async { @@ -92,7 +95,9 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget { children: [ titleWidget, back, - action, + Positioned( + right: 15.sp, + child: action), ], ), ), diff --git a/circle_app/lib/router/app_pages.dart b/circle_app/lib/router/app_pages.dart index 2bb4d52..ccf25a0 100644 --- a/circle_app/lib/router/app_pages.dart +++ b/circle_app/lib/router/app_pages.dart @@ -3,6 +3,8 @@ import 'package:circle_app/app/aboutapp/view.dart'; import 'package:circle_app/app/account/binding.dart'; import 'package:circle_app/app/account/view.dart'; import 'package:circle_app/app/blacklist/binding.dart'; +import 'package:circle_app/app/call_out/binding.dart'; +import 'package:circle_app/app/call_out/view.dart'; import 'package:circle_app/app/friendslist/binding.dart'; import 'package:circle_app/app/friendslist/view.dart'; import 'package:circle_app/app/help/binding.dart'; @@ -83,5 +85,10 @@ class AppPages { page: () => UserinfoPage(), binding: UserinfoBinding(), ), + GetPage( + name: AppRoutes.Call_out, + page: () => Call_outPage(), + binding: Call_outBinding(), + ), ]; } diff --git a/circle_app/lib/router/app_routers.dart b/circle_app/lib/router/app_routers.dart index 5d3c8c8..6a169c5 100644 --- a/circle_app/lib/router/app_routers.dart +++ b/circle_app/lib/router/app_routers.dart @@ -1,6 +1,7 @@ abstract class AppRoutes { static const Home = '/home'; static const Complete_materialPage = '/Complete_materialPage'; + static const Call_out = '/Call_out'; static const MineFragment = '/home/minefragment'; static const SetUpActivity = '/user/SetUpActivity'; static const AccountActivity = '/user/AccountActivity';