From eb84ba7b070fa82d4703978e989e74bbdf61bf14 Mon Sep 17 00:00:00 2001 From: jiahao <283739569@qq.com> Date: Tue, 31 Mar 2020 15:38:43 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E7=AE=A1=E5=AE=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/gradle.properties | 2 +- assets/fonts/iconfont.ttf | Bin 44636 -> 44884 bytes assets/images/img_check_photo_bg.png | Bin 0 -> 34377 bytes assets/images/img_realtime_bg1.png | Bin 0 -> 9242 bytes assets/images/img_realtime_bg2.png | Bin 0 -> 5183 bytes lib/chat/ChatPage.dart | 94 +++- lib/chat/ChatPageItem.dart | 3 +- lib/chat/input_bar.dart | 23 +- lib/data/UserData.dart | 1 + lib/data/translate_hk_data_mgr.dart | 11 +- lib/home/audio_chat_view.dart | 8 +- lib/home/homeMain.dart | 74 ++- .../realtimehelper/real_time_helper_page.dart | 154 ++++- .../translation_butler_page.dart | 60 +- .../translation_evaluation_dialog.dart | 42 +- .../translation_order_push_dialog.dart | 200 +++++++ .../realtimehelper/travel_butler_page.dart | 4 + lib/proto/transhousekeeper.pb.dart | 70 +++ lib/proto/transhousekeeper.pbjson.dart | 17 + lib/proto/transhousekeeper.proto | 12 +- lib/r.dart | 530 +++++++++--------- lib/utils/CustomUI.dart | 140 +---- lib/utils/HttpUtil.dart | 73 ++- lib/utils/MessageMgr.dart | 2 + lib/utils/msgHandler.dart | 95 +++- pubspec.yaml | 3 + 26 files changed, 1054 insertions(+), 564 deletions(-) create mode 100644 assets/images/img_check_photo_bg.png create mode 100644 assets/images/img_realtime_bg1.png create mode 100644 assets/images/img_realtime_bg2.png create mode 100644 lib/home/realtimehelper/translation_order_push_dialog.dart mode change 100755 => 100644 lib/proto/transhousekeeper.proto diff --git a/android/gradle.properties b/android/gradle.properties index 7dee586..73f050b 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -2,4 +2,4 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -android.enableR8=true +android.enableR8=false diff --git a/assets/fonts/iconfont.ttf b/assets/fonts/iconfont.ttf index bf143a8d610a726d01306c612d49952898e0e991..466fe858c9d995dc6a1bfac60f8e605b50d3b95f 100644 GIT binary patch delta 615 zcmYk1&ubG=5XWcUZnoJp+hmuzZFyze~T+uvt< zU)aj<(!}!jMF8#-fcwq$!p#}~ulKtEQUl=OyZp2<)wkY%4*;Wa z$9K;HY<>W6nX5a|5fhNSq}`S9{8itXpU}w@0QkI7y8JIYzny{*=S=F|z*>}6YtFQS z_=;U@Pk@UEM;am#Vq3=^z-L5T?jg#aW6ooh`abZth|TQt_JUojtNax|lJmb{^&9*T ztXWg85Q=`9X|0;|K)CM`YXCM0YV~gKeEp8sVVAyH%hF+EiJs_u8Aqp4hrCJbs zhp{u$&f*B;rj#7FK zF{l4|(axz?Il?zHh!5MKppootcPoW|rLwq7Ku`|F*m`yfEwJc&*!|h}i zhcOmzj)n#YL%1D|;p<5}kQ7B~s*|D;5Z5?l9ETKZo?cO;pIVjYs|?Mj!Y18%+Y+|M Pc&|{MH5QFoItBO(n74t` delta 369 zcmca|kLk`GrU?f1uUMwCOxMz?b@$R`xzK`TNoH-e8@;mOp)qk>tSGE zcmTv^89)IpRyGG9dk+w+WaO4qaOM5~&cMJ3)X&6_lb@XUYWg7+1_qu6pcqqbVnqSt zE+%gvTLP$FAulmE)h^^;Ed#@{5}^9rg8X9Ml1;tclNlIRJYis9t(dq+*}j2+5vUf3 zU+ljyA)epnD+4zRP=JBq*5ZeOF#7+`|2b^B%#A=k2hd^&0O@PkEXTNw$qC3}1!86( z)&XLm0Zc2v<}xrY0*ZoE>Hujjus9228IUiSp9zWO^R1!p%aCLtc-mlpg0Q6>>F9)2M)Q31ghOagrT!n}N9y!?VM`S`{8#Kigd zng01)F#KNB2X{w>zY{hw}na2T(b zxeG5p58q!V{fkgt{r{WP(edBZ?qDse|LFVwD%f4e+r^4k%gWu^!_DHMPq|Z|FW${tbRBrw7ElJwTiAO3M!oEu`_aqMVM`++OR*k1~@B znPY=3f8W5{*GYKZZ{JX*@vvC(M2Hec^S*{<1QCozoJ zum;;t+1D(qD^R3Aj$@rjZY4xK5k+`(L63A0S+BqCYUnE%@n_)eGPuS^6t&`!zFC@L zkRD5HH)H&XOL{Q)<7(wPUnwqNi8s)BFija@Z%GQD#vuPXUafquQssoY+$NeuOr5cG zu=IdpMqyF*3dh5dztbuUW9nqLKbJncGT_CF(YUB)7bHxK6Yz1skL4B|9z|z+t0Y(? z`?d{!sLd|8G4SSdYsf&YbxH0gQ47I>6-lFbd0LJ`scR=}&?_+Qxj-yLIsDJ=rbi*2pMLc$>#|Z?1xpS@DIorKsBNw}buq z?Am=Hr(YH3-QmQv!VbT3x+^vRU3n-7=ZHA`=U1H5|D*Z`#eC4x-zaIv{$l^7Qtg@)MClZ!P)ss@51?$nu*|V_z!xw2(C+!WFfaD7TMb1YtT&Z^o6&8r9j+K zdOBfD70Np!?ENT&p3LMEnRa!_>Zq0pr>@%S{>Y^{^(_g7dibBwS&QbV<+-lqTG~Tt z3vL~cvuaxh<*&8)zB%RrcR_iKX|F|ycO4WLI;wZBl1Dvleraz1!@B=d&+=E_$^Sn) z958+U>6gDa9c7*WWuU{a!^AH3>3WvALwDKbno7jYQ?u-owh`V3Cp0La9A=LTDp>yR z5vs$@DL)6ne|zY`)17gDmsdgjcNOco+2}BJ?=~OV?Zy5P1VTgvW1<>~cz4=aGJ;DOJF_yg;nzF(CY-15f_E=F z^+OdbV(tVC(Q;M7>mxywX$VxwVWQ9PgVah094z3Yr;88U!Z>oc`lfZj9QRI?5qFD{ z=G}SOL_Etq6jbC_qsmkIIk?oNPIoaTtR^|LH)c5e86o|grd6DqaI^`3Gh2jNv+Vsy zk~%;@ZF4*osp_|Q7em(iFK9iu5C`3pp#OilewE=OxvkUfcaY>c>yO2#EZX2i5rTDp z)wmNip7=EO18JbQbMhqi&*Q|Y>R}Y|&l5y-wJs{Gb8F$IGwyQ12@h;MlBr{>KT@m^ z9Iq_cG1~t<-oeD=Te`uGSmP!~iAutEr;(_tw<711oir+5nl=j~v(~#Vh>&q7wn<~} zUqsZSOGZ=pu`A=H%SA&a)CRam3&5Y0jXv+|3go5|A!_U;+bWS4-D_vCGgk+7j)?*1 z%r8LB|BV-o)&Ib+qBAI)KWu$=-vp(L2q$h2r@Kg) zx#99F2|y-i)9S@cEeY0`)3ilyBW7*>#w8b;*;Vc zHYpqvO>9jP(kXyhA*0!LE2V_j{b#@N;FdeM(ePz4_l|aCrVSht92;9<%o1f*sSgrUP5mf3>|7Vx!S?L z3Vn8x1ktrpVV5jbqbk{6rM@j4@Y{-MYCI43N^|XR8Z6o?0qvEtO@zbVnxxB)U&k2( zPaC?gA?p5j2V2>L%9+VJslh<=4(q!Gf9o0`Hm>7`+gT74Qrkn7*6Z6$R{n~jDFnB! zEe417(hoX4_xx_*7Lnzh?zdzj777{r1M~E8?DQ`0GAI9&Raz_0qT4i-WMI?*bVP4U zRr8Qpev&a0GulCZnSZ=wy3y@4p-=Ap>pOygzO2XANRiet;lL!95IAn#yef72Eb!n% zp9}WH;_xM)Bo{vc7ZSVUuD53!E`4BFcyg(!xC;e)Y?&epc0prZi`RZQ$Rff1i^eEK zhq{2Io0Hi~IB4`F)7IRIlfGKq2F#}AA%&kYCrI(09O#sf7<5P5tPN8)CS(XVGK3?ytEppau(H)9ucyee zJi9MB#wpLQ;rY!|>6vVMrBR@?%<|}R;X&L|rtV+Vhy{uorJ9(qs=la_TIPLmdne{r z9hWSn`?QKIXqC!hI#>Vvw_%qJQ=>y7m1F^*=1?3;1{W*HnV-oG;;@O97LC)C%T6cb$@*f;XziAyvD_FK$CjN;!8m1I-%C^k#Cug>nF)dy7s@ zQ6cQlv&{_N<+OYnCx3%1HlF47wa1n$Zh#x}!#K70Y{ptieq=2Z)WE-m6?5vS>%UdP z;c%k}aWK|3HdGgLx719}DYPD7XWvwvQYwA56(^bUom2@`-_@3}=FZAFAihCB7*I|Ec^9r$d{IhNpGs|5W9SUTC972e zYe{`_;2?W);IZIbpej(SD*Yf!x-3!V)>h5WACl7d{EUx+ml0) zNN57771#kFY1W&rl}7{5%dtE4IujF3pnVZpR6?^T9U8ym4rh4}l9u@N74|g{+e7ep z@whX=Y_tJMnLh+_9@ZN_jJBCn>nY;xSdTogz9@GKfTl-Gi3q^dvMz5_1BP89yXMTd z(^B#Fx!QELE%Zh!w)FZ!n|BACtgJVZTk6V5Z^P!}|7$AhuBcmlqP7Rocq24DpTJB~rLm5t==`)pTsBICnEyn2?S^rtgU zE1M{cIrElgd663Spu7&TixI~V;q1~kz%j6|z>=A|J*AXZQ^M8Nm|4qz z2bK3^HX_R)&yAAn*3^M1wK!KRx~eM)AsM$?mGTW0DG367DR)m{IP-0_FFd9`D^|5= z9H~1#P`A@RH~0S1(G z6#q~;5F4Hz);X$%C0n3`{d=3ag*3Rm^h-}tSEc%euV3O`@y-VH{4Ipj`0Zl0=GC)) zM7I0b(RHwkm+k?sVs3S^E=$^GApwB}W;5$vyU_~IsK#0*Of62vTT5<&)U1-C2F&VtG7TFoY8YG zkd*rLxbS)aQ9lM2trc3~uX>rQ7MCqS7(OAh{s zxpf$4O2>lW5(J6~SyHX04S3O`((44m&-Hm<96M` zZEGCwyu{RRcl?%xN$Qqn-$is^Eb&C&e zwo1JBTXeT7O(!7Nt+lj(y;OtDm5@bcJO%U(y67=Vu&>Pdn1~d9Dd*qj!@#%k+m4}p zoAa~Ka&O@dnJ(QP+M0j7FR|hy0WJKo>k7cNq1R42ZLx!?F&^ft0*3(HSD#DG>vk#L zWn1yXS-AZ7psf{K@+;cV_Gf!?suEXMKg`Pm{^nz`CAHKr~c+F(1*;Ob9%-*T2m=ZrBbkx))RENaU&Dy@@RdK{v_NJ7j7 z+8%3X0j6~T)au{}u&u!?ZoXLW*gp20-sn=odHd~6I{JSv1*8*;`d>)8|NN8LDxc}G z#6QI7IY8k2{v`q6t+d@*ZSe?WwLT5KNo*UN%pR7KgE^2;u7UEVdK zc(_&PqW@PGNg%-;MOtXlx}J&u*M1CMLtLU+Jp)=7v*=B(rjjS&AI7PHXXo_AasW_; zA)~Ig09P!fHMqgg+AQ#ryPomy2{BH)JmWUxpu5=@t6ioIMeSHLF<=rF{E)Q2s@grs zYaWr2VW)4sQud@B)0Y@MHkn4j1uT3!#cAq3FZIc`m05(C&P%s5j;01ElU_ovHm6!9 zo&5B!(YLovnzmZ5ZWg3!A%!R1`o>0Jyb()0sQFx1Xc1R?zf_s!DeAek4Rf5)QR~YK zC!<#~5Go!=bg5SOLX-w&J!5h!XmJGMuYPsV#puDYSM`>*|4c8HJ_5oxdIW5@ippBw|RWwIR|w`v|6 z%)+*TA7_OF;76^9J#Wxmnf))pia++h#gIG^S#rxV;-n)b_nD}>=vs%%OUw??cv}09 zYyYQj|EN&v!C9V`2lR!X_aFV9S2u%5Z7puTyH@hL(cN{HdB*ENe?{I&M)f|QJ1!x3 zI^7)Z*XrciwgvkSF8A9XQh}Y$?%A3gavuhS!K0L&=eYs1 z@2z%B8JP-s^=Z3pzenyH0K;cKPz$?`&(?o}Q<5+FbiLXNV~C4rZ_Ys-IbhDEzYHo` z@lm`cY4>E#$&xFd^`X2G2xymXchi6-)sdNqyYc5+s5qG-j+>s;A#AS9YS?N){Euh- z>thU$Ow=ZHbWN9PtfrT8D0l6ddM{Uv#)%L+{YDZWW&IT*Zk`<56D%CHXBW)5W)sbQc zDsxKi9jo`8LuxCAE&E`c-~$NKk2kS0jtFeYAki;j33b;t8uzC3fBr%ni=s0930fw`(UvQgoKdTY92}Y6IdpsnydGu9w5ENbbJ3+~^Ur3CHCEZpf8% zP}Zti&JVFdUFCg1C_Wswxxv@KH5ov10%Pi~cC2R=N3P#rBi~}TOFm+UGY))OpeUE+ z4EbQXh+azd`gM{@1tV**GC$8Ta*o*ZyrT zA=s}r`t`6uM{_y&o6Zl}&gpk%AuBR$J(;!>m@LwOThJh8maIXSU zmmVj#NK-zKezYW*q}yfp<{!||U~_c2UglSBBiL?J{+lO>Mvx3$kAVe=r%X$l4i{zO z>-Agyw?{J;f7|&Ze(Z;1x`CIZc+9b;!%5=)2^4gO9j0GVH@*d5)c6UToAqBd2&!(1 zSdT`O`uv9FeVb*biU2O2OIN2fbSY?_R#GAkNPPUUm-HwxMkrXTF}_oV)gZog0)yvl zdtdgMDdAQtRi#Q*rm<1BjDWk+zL!HLzLwFSX!un{AKV`CYVQi!NU5;;jBcwY$Ppk_PW7Rne0NCx3ZRspzA>?M z>bo|T0JTy}!_5rQBAVBve7Y>=NYXl#R-UQ`Yg;7Q0Y^FV(?eRRuH;;vR|4;2eFB&n zp3^gPx00{M|*!fqJ2xfBy%xcR<~D|0{2 z=7`I$S?)0f26Sr0*dzAYvNX+@=7wVd3`NPJKP4sjp#kHrXc@JJ5T{qQ9(_|PVBG-s zV-rZu6w=#XxE&qZfrRNHb1G-uJtb&$yzAxRl!ngFRVP3Be&hhr-Bc7!mMjeB87yuf zUodY@v{X+|RaHD|pT*#B$#e(0=yoQ&S%;puPVbJ5(ci>l>`QCkR~sL-1-+#ZJ0YTd zYcd&qqUY2Zc-^@y>H7W^39Rcg%oS@RvCEnS7{!5Nw&3q1P|z1`_(8S!O!aK20M?t-1xuMLk8^LWdn!F3GepU|hM zqOGcZ>hkRyKZhXvupr$IXQN&SR%z<`<^6yjR0dd^`Xj4+M^8DOh;i7~3cJjS&}8$8 z38&7U;wWcWsmSDK-%c4kVnaLY>os*P4U4RwE65T)19N}5MHsA9lwDz<0A@`>A`-7hRiB)rJDZ8(Dg+dEE?mlcL zdVh{)1(vA$FeD+bzFxI9J48?~o|07T3};oAGuDb+IcMKqtt{8wMlz;p&hg6sq75Kv zx=NkCh$ERxMn?u0W_vVDAY?%@^8o>#SpmPtgb1bUgKkLXHjvAXt;nlAVi{q^J)x!Q z@H*F<$-_6-QCtfxL<;ls1B$A6}ih=b78n+H)+bFi4V{QfCP)L33HL-Iz zvJT;RGXDF-OyjAeS764&emX6}=)L2*ceiksh{Hb~=iZVQCd)+I4jigjdxmbO{#I!w z?918(cY+qN1 z^7c2Gs@KsYNsZL8y3L)HTVgkvW!ERGZ)W=TwnDaFv#4zmoko66B6cpO${44yb`PPw z2#OcJ2+Y=xAcs2lo@i%5dONB2DDfGXaqQN7XSZh0DO%zVzi?hyXXvtfY1-BkXF)et zJrj7It&~&RYG^XYm?l9ukCk)}M?SMAjOj%f7b|<$eC0XDe%z#+)w|6*A+a|*gwTJN z8@W&=Y*aY^}Sbm+O-n3>q{qAgjHMB$*Mk9ss3%; zdfVh|_8^s;B=pU-+Vbt)`9rWmtzZJkKO|{R1GGP;%&f(sS>s$RCPsf&yo5FU`3?D5 z{LbXp(^nKJN`eL(ANSLhMr4_P+F6ctW=6m9c)S{Y4i052ztD*h#C^N7QN%+d!Q)?_ z*8&?*j+kLM_rV!5NSJzLs}_agY8kOisJdfQ{&Mwk&jI6YzAWa{hn}`q(g23+RK17| zu>;5M^>)%kXDY|s1{D<)swWb{E+F6&A@>#5R;p2=;}qqKUe2*ci7nYI!0LCgj2^hL z`hsId;ufc~dIHb%vbFB>du!-@=7s)4&Jy?CWb;KaP6Rie^-OVG0Ma>R9!fASRAqfw z^C9Mzi@}wyaMoW(24L|@99bTKn(|Q+tA`5eY_WX#oduRy**?*+?Ecj-Gr zDXT1}%Z8_~u9w@X$Epb~40-}_gUg?Ph7wi!v?Hw*%LTt2=wB~tBwAqUge{lkuHrqJ zi7FMReKGMfOHl>@z9J~>X~p;Ln*)yDaakPEhmvs9|Aq*bOl`HeuWTH+2PCWQ63(3O zofwuPp0^cyt~S8eJGrm;>eFSA0fmb-%Z%nL3ck$Mi?zuTJ_B`wkb2tl83Lr<^tTPo zb~`VnYq@RX&iZt_v8;*$(2e@Xc!onQOD;?8bF_)L!V&6v)| zSAA7S&dV)USRK#LNmb*Vs+leVQsY_Y$_)#@sDRn!U?v)-tT$YlMghu70@_966$OvI z!y~SUMH}DnNQN$fP)(Hi=L^ldmPy74&~HC+6D-q&h`B5^i`(Ag=e~C^Cr-%fR@_xs zYDhn5Xw(ze#DDF2DH)0@Mm)?Y@5ngyl5^KJ`T*f z*shPtt9r7j=KQeDES`HdlC!9m48I+%mcF43tz{J`!#{TJiyQ_MOd<`;uBL+7mFFX5 zC6@o}K8!OSW;*nj6ANmqWG{yt-7!97=t;8FW?N35RQaT+f`UuPL+rkZ*d(^0l`rSp zEr_ah94-tm7rzYD5x3F^nlK!Q8ii}GQ`{M@j@3r_>lx8Ds=kF{-F%ilVGlB7}r;oV>_l5-SNp$EOuBQK2eQR=q!F zWEB_c)BHspT`yA;*aj?+ZIV;LHQPVJ3>3K-&<9!81HNce&l8^@cWjK6W*aP|rz$6j z;^XAX;ut*pd*m-#@{Om?K^hB0#G`RHx>?`HTIVr%B=YU5{hsVw2;%cUF4h>-&U^xm zqcRa_#JO1a2Q=w8S3OKNy6YaEhnj#t?_5=NeXIq7sl!#@b#~?}a8rgMy!7zx_;96- z09PxpuxaWXFu2=LuLR)&5gL~6IE>}wv$3(w8lw4O|))J#X z$KCB4om{SB7#yjGmRx6&nN z+*`n=Z~Dr}7YxBm7u}$|RJTwu9^JxfW>ORS1}+t!sWg~?)~1pO72e5$ZbYY$Aaq_0 z7^jn=KDFwZp)BH(D^Al+I|fL2vgKY@xyb?39fnc8t=7DP+IM5M>F@@Gvr(vY3N2U@ ze*p3=+UDpXNJU!9KlC74fMll8V{Hmi;@QOuT1Df%c36J34#uk=M>(26NRPe*e;i&t zOo?iZPS|Z33B`i?B-}B&E`R6FVwoy=dDXjoEss&Am}fR$#4?g zXPbj~t?N!In=;~Eb6jWZ&a_q`t|d_5 z<%jITwn1H5!q2QXDC-YPLly2Sy}gmro`zYEgA|m9aOf^WPdOpC@q<_7d?KV4(`Db{ z(!rvDdP}!6*v(UeyS43|sibzKxc|W-!;8oplTo+fCBh)vOX4&RR5y+YS~gl}eTNoS#`-t!c>2Eo%UUtwF@p^HZ_>$Hh3M zas%&Imm{{68yD`MS0d-cJm`BQ}6A1U@nUOb=ap_k;#{#i;n?JrT|T=!4JI=b79 zR&=diCX*aa%O|LG%n`??cz|uj!5OOLx8qsLzRo=<&1>gP?c}cf@e@vL=~`YSd2c`= zUxhFBf?Fg)1n4!Rj57vj`I|m~Q}M5c(L{M9$1$BzM^e-zKZ|YRk($2Wh25-8yi}5K zy)y-e@_^&Bme_q#Q4|$LT}Ktpy@T-IIm(jc-8k|UgUE4noZn5kcqVzMl;C)-CmSn<_s1+H3uv+jwYq3aug?YJ)620hTguma zm`j*z_+SEFrLCpVKv3enKJqvB-R!;_+m`FNQ7U=V$G3>!lAx8G3fT#0dDWk<1f|8D zu*f#$J~vvwHd0GRwsrxd8dk~k#nixuuu1v|MidZ<1*KhVCJ>r-i}CJG?b2eK7V}qw z7A&XA>!sD6cj!A7optKYfjl~?^w_02TYca5%m_S+(X7?HrN(n*YCn5#Z?%kl+Q~xg z3}!Y~wjV~xJRY8DWf;S06%A!)j^O>|(&RT#z*EPB7qn6hRPvH#R7_kgCdc&vlK??T zjtNSm`C+u^SCt;?d!Pt?QNiADQgoldz~{=b;&k=#QN2DJz*uOlZK6E!Dqry^cbH;5~W+3~NM!Qe( zJ0|9c&8Jy2Nq100m#Pj|*}~eAQ!{aZ`kjQ5sKsi!O#`~5*;ggE_lg)2M={*JB0J~G z;oY2yQr3jJX&rAe583hVD2redZO`2*)PaR~IQd?6{ysqv%d@fV0?p2)A#&ilRkOc+F*mp$)yK-omFRdW2?8bHfKfQW_QL(sk&kEK{DcshA{hvfJ(wH41wI6n#dplRPZ%xIvPo5=n(2ZWnU`^omezBFy4Z@HPc|q4sz7l&S<1|7PU7&3fkMpH0N| zg*DwkfK)MkV_rsk+EOQ2E381dT>{&}n7B+QT3k0(FcH_(_S?#Ux2F-Irl-Vc^cPa8 zZ?|u6_?@>g4d*M>_^T7j2uRy0Ek(I_IYxQL9?}iWE5;p9 zr^}LS4yE{-Qj;p?!%2fhWW6HC3joZG_yUFo+44_eu5>0_)wPUc^TM#3HKI^Wx-sjP zb$(~JpIKv5W~DB7ER77C-Heg$pQ%kip6KazQTR>6Hrn_MI$-$%d(uNx`pZ>b>rbc5 z_whE@`R@S@lKnf8IudWj9rLfgk{&+EAy`sDjW}oDUyaESwTg@GAYnedP8UnD(_EDK zjjeT>yzUEKYk?s}iTn4)VCau=rEO}V_paLqU0@3lw16^EPy z^5xTqZOadoV!_LefgQU&iQm(txLM1Z+6@|42Rfmd)LEPn3nXG?ais&{8q8JugW%5T z{UM--MsQkk$ZKk(=e1!jrruEV3n|^Xtr^lgvKC>;fyVb{x7LR=tyv}OzG&;#;p&p? z_~r8K`&$E-YVl>H?$$|l_T|o>1&=*4pKZRr%Ufm3l)o>NZHJqP4%7otlo?VK{Z9KvB-LNpYxrca*(hcHh&~&M zivpe$={A|PzV&Py_2z84*6;G0} z$Xi6M4a>UW-BPVseB65Vi@VfT`K1|&E2*8dxp3QM6V6!)^kmR&m)c!P8^=h_OX)t| zEi+#_OU0!v|3*G*pm19K<@-};EEaC=ABH^^`@!kY z@d;K9n$ccd`BTjtq2_xYHBW=$VK}Fqn(8{gRUUVk`^f9g1<90ZuadIAe>CXOiys9h zvT1D5q(4L$)d>B+Md7_mM3rvR2@G za;Y{agY`9aX0y+m3G&b;t%~v$t#SVZ^B>Anpz9C2gQqE4DI-^z62utFUQ$>-F&H4+ z3%us8c%+FG@RFy4>CD_ti*S{5(AxYmDY!ZE_tx0EzFX= z#faNx%~KLmvi?XIvBme<5w|8|ClZOiM1G6aPVF$JtQzRc(4h@Vd;K*=SlME0>W|+e ztE0%!WMY7D@ycVa{1m05sW?cHxsjA zJ(C|4f>TU+BqlI<%})uzO3|K`88}K6{iYW_d`3NdsLR|EqmhyDt7Nd9yj7P)&&e`w z9Dlx^J6|WjWzME)H>fi)rVlEIr`nO1zLhidx{rIO32KPZ%jCZMh{mo|mD(xgzR&fuW*gA zsQuM*vzv9Q^IgdmT}6q>(Vwq{h9k=fcz@rnu3=k~WktTqZ>xAgvw%DPGeL!6f99o6 z%bowmr8UEj1y&;Ed!<|6a$ov=-;FTS_I$-r9dtJ$CnIJ#pIDSwAJ(VC*gU4fB0*)% z((zJx(z{VFFGZDnBp}~7cSO??MJFk;YZ1Vfa0iGKRJ`#bsM>mU;X54}&8!rCG}(*S zFi|!R-FNylu>C}q-x8r{&9|9Gtv&;S7n{9kSc^&Wq|?FLg@hQW=H!~>Rg%$XDgIV+ zvjV^IWFu3>68NB47=O&a16;z$lxcb?nmgr~5q=Zz)iz{eP5^EbqaeSe!~=QZ}JrK>mpwzT_q@r z8u*OK#n?RuXL_8!%PS`~{8WrN2Yywz#BrZ+%Oif0Koq?(jJ{;I{|cPv78~#!r!Qgb z-E`bLsq|Op5+;geZmsyoV)l)&Z`B+kzOW^f1#? z@x6J7#T2lA2AY*i!J#W78@gEIaYL{ENb9$M$?85Vqw2S7%4C@dYRoXB+WMt-BeB(c z(J`BST$ZZ2H${Uv6%0dNSoIFi9%kx3IvS-gMwC>Mzei#C&Rf_2 zPVDm!2SvzFg}aX3)j7Cf=^y>ol~JmDM;C@YHTWrVTk$(1Kbw~>RN_(Q(QuG97;2A| zIdGEktjr?p4spRS#&&E<-%L6F>xD=wE^0Z_G@Z%l*#>7M2z_J(nc!ia*$Y+raf(l< z*o!}S(?xj0yEO5##mYDND65eTG>okG$^qoi8Jk1JX(s~o(yCyAj`RI1X&eG3`zywA zgXfF@_IASPET!YoA8pcKPH0yDeB}E8VNxJd>=h`45h^2s{eFen-DJG}sUd~vKN+&o z78;#07qFAQjzSvoSo=~D4~k<*^%4y@Bd(a1Ww5t^jg5m&O)3HciMYdeJ5dQmYa;7g zI7@S)0;=&Fw+8Rw?8279pSfw7zK$Q0jX4Rw`h9WLDU-@ktXZQFb%W+7o;&eOmKraI zfQ=|--&)d)J}!?&CZ>_*bX90n7F}SMB z!R)Jp8B`mu6Tpa#n`DHJEi=sNKBppH+MYD%2kho(;*6vVdEuCo7Lbe$em~~C(ZZ#@ zl@jnlL%3OPfM{~hK*NqHBuA57bB|~44NtpXcsY8@A|t@bL|p!{jaK10s^?O3qtlx| z1)vh@k#boYd6?bxuTyGFQlFBWy>Q0s5@f)V(c}aN?p5L3N;t7hD&O2+H+q4CRWDEK zMtx8xOLg#}dLBAxv3>rCF8f@iy^!#HKn;WNtZL(sww8Lvpi+Jy=G@QHJ#ndK0gDSy zmmj04CbVLSMM)mqGZ!qz#lYwxcYP;w;dkAQk3kqpgC|2D69gznJ&cuC{&FOcNfZ_eANmMG+oPQjr@NG#LnQK(#wuaO-|QEyAsr_P9)8*tBBhs1`3TLNDU zX^j?4fZGKm6>~S8$_9_tKoL~M8rcF#iu@PQ*U>Zg*(<#kT*!x8krT&>>S($fZ=UaF zJQEw~kW+E|Jb+$Wn%y+Rb4;5kH`U3>MK5{xVpmiPD#diAHsT1{N})_>7Jt+wZrC*m zTNz>UPLq|zGhjoh}HOwhz_UcC%yGL*!b=L2w#^%pr z=p+0ry#)F{iW#wA-WB0`lgF-)};#?7~fo zye)MR6}aP8k*wI0$xGvFfS(v;Ti<7=|Vaa!2YktsBtgde|!o<*-C%C1w5%a02z zfE;d7gXC1#mdemHW%Osie$Pp(?yx83nhJfMuknk&~ zBd8B6QaSbKfbfbEoMoZ9COP%!5K*uT^V2+ZWnX@{Rjj8210F_p`681#AuahIR+^Mb zxlbdw@{P!zst!>ueQtyMV&6o11$HvbC%P;W*ay@e8B?Qetj$+OwE=QSZ3gf2jSF}L ze81huVqGLqIU6vLHhb!5ll-z|=>4n-i=wpf5Dc%kC<|4wE>U5Ts&>a%<8+9>mX((o z+GuCv8hjA}Bgfq|bQqv8c;hl~m^5Cj#WAkliFRQt=|B~f$maH4M2K|%s=EKC>(vwg z_ZdIn8XG?ff=Y$)(kehH8l}f~;m8x|RAcJf40Ta=s1>=*4OK>jcBTGpGepyJh~ zGhkJ!S06&N;>sP;p0zYo61hR2F_XCfWk0fo`Pj>7$qWKZ&N2_Rtx^~r+oN4C04TZA zx>Vn@%VpOmc0XXip&!7dG+k)=heu~3x%ZS8t=Gb}_ZY{&O=f_tv3nvDAF#`1jvpn> zFW-wrme7s)aHx>UfreSqqZo9_;Qk4VYplP?s?UoOK(g_lt0B$U_Nu3{i`_OahhAwF zK6RZ=!^dze5{uU8oJU`x*?BaRzbEnu+_5sqqx`H&^@L}Fd#YQwe~T_P zxzfo`8=5a1K<+&mxDF7tc^c($b;7VVXHduzRH#~E6k~VC9x}k31KArKb@+yvUcqx_ zOf&8qgR3i9xhCcDmW#9&1HpCsg;J`2n{QnP7x8cp3CJjTw3m_@{5(jfHkU#ivTajf z9Xa=LM%Xif%JOstt661&Q*obB` zrHR40kA98;okaT_82}?g@bPN$19>Z_$Mv0p0A^0}L4@Kl*#D8xb;Ros_=?fONsOk5 z9+fM{tTpHLc?WS6AKTbPN|W(gA2^mEXU9?id$7+QoS~Zs{mAnl7y5i$$Ebzpk?iA0 zqR&dIL#D5qUZ>V>3BAe>sh#6jnmoZS6V>1GT~JtY*)86 zbDvX@*LU(>wIFx3Y{BFnSMuR2_^yJ3**(JK8K+g_s%O6voHl~9vgF;;z@DjVpy1*& z@gAzz4l|!sqXX*HwG}N}-04bDerA|VswvuZ_oULqy(@dIi@E8?WNqIuUD;OPixTFI3L^s0Ne*5OF#cSIY#80BNRy9!SzaxtS(r!K{5$63w!cZd6^gLYIo z$JRayM6?P1WDWtN8RglEzB>{bo!LZ8z8r!~sL(na8p0f%1KvO#6lg|uTs?KVT+ozU99vGrx|%bbdy1O!+?s?!?m2zcrbbJ?Odgi=jx-R8&GsvRyV`zuKgTm*0PdTR^TlvAdM82Gf2fvQ<~uqhn87) zh`T1f-SJ#z9H`&B(%x)Npxco~UHes`MvDK$TvdF94xO986#&cE0JXOndoer!N_WxB~@7{QM`;s4ly$H zNGEDbxi*NhD2|%a4pF&+JxFAvC;asdvd$OEvm(BLvBxIzQYTRrSFw#gbCPIhGv3Ei z7@EifOs*cm`mP;PuH6Jioed7;w;iJ>l^VS}gzp{%zwCNGawu3$2t@g)8mH`LL6yDC zfM$_PzF7VO4u;0MuKK)6gA^lb}m_K;%3ODDE&>L z*(TT!uA{q^W}MOVZhZ<+n!r)x7jodsJ#!D!P)% zZy3*UWT2Xt+u`M5yS7MG2CA~gp$q4kl@2{Ciq5MtlF@UzpRZs1iwmv*n0Kdy{MB)d zGfI*fNl|p8i?}#U;%D6<-0S(32GBJE*+t=2Wg2Hv8S9rhn{LBy5;{3^#=L5j-KB4r z|CC5g_3FzphN`@^daBm!I+b)E)>pTK7yY^C%<}gYMLIK@*GWT}rC}#PGW+}$DFkjB zhuh9@Ce@;v<~PeDiWAf)_)JYp>XZ8!rEfMNu%ps(rI3>0a8(OGhfYVu)rwA2oG2#m zMmMc;$F5IkQ^qnusther@_@6#h0Oa@x)MA-Gb^?mHN}UBpC&wiR4uDq;f&VACMqi3 zP}mjp<8{rM;DHrqvD6Q>!0CED&4yGcRnw8tntgwC=0Kb}RB1!#4kb{WuTBKeqY#VI zKUg6X5*i=T5=i9os;B_%`Y#)J;>Zc7qt7=PqTb$(Xz9GHC8L>9I>rgF7{{Hc2;%%f zl&eZRziZLpIT1NNNTg}x;4+2H`1pE;nGTI)_h@j@nb2+~JG&@zonl7i8h><_Zl|w^ zmzCil9om45j88NDaX?Fj$Oii;4(3S5HBpxKKqimQ|G@VJxoU6Zmgv&VhB=^3{)8a& zGCL=dvkg2o>^t0j{pDXWJuWpmr+8{kTbwo^xDG!bYK2F|@``%kO;sicb`lj(u5ug? znYC@2No%R5%2bQvFcIlf=v?hDtxV$V;+ZLtZVaB2MMG9bZY$qq1~iMTIoHV5g4I5W z!&T9^yQ1fKg6v$GdUMBG?kr}kM8#I(WLAb&qT-Sfasw#i>MPGvWG>8ezdO3`wvBV5 z$1Bp`X3k=jj*4(di`YLA_YKaB9c9LQ4Z7y* z_ReGQ_ssLcAaV%7Lsr^SWlDz?HfFtsqjpwG)PNPmur+6+nzIOS)^B@cu#WoVW}}iv zcsWRvr(t~cg@8r@-rg*8c8&?5b|l{eiIhb$hxHpjptUSh3V26j=9RX1O0m%)I1Fmu z=0W5Hixx%^R;Bf#N(&A8Z62dbh;loN97gBGBG5`Pawb36we%sJtx{tY=@+MkBapXS zQw#8;;&%m)9a;)Q_PYaKJJCq@L^AhC@D;)JJK3xPg`W?ihY#?Z(kwOdAaYyL(JWBM zZq=Ed>BPPQku3-EV#)USmw$O8QabA;GQ_QpZp?T{YD*^7fO|y*h(!-pMqpM&*3{_8 zs{F=kTQenc{j77oIs#{LPi|xii}voe6Kloqu82mR6Zov;m_Fmi?HSQQm+urE@hllz zp}8&?E3ZDA)e+*=H45r??#O4q>$|I;bxqe>**bPc_B^ZY;ZyPciMY)OL%P&xI`QtK z$nqgZf}^!Kt%=wu&+I!N!aA?h?^i2 z6$I)ak83-xio#XfLo%c83Lns0si_Wb7osw1x1OpHhY(fE&QrlBd-eyBDT-s=77KP& z2CD;ol*lJjwj(-$paU|eW5n}L+e5VtnJfR86Oi4M09qS4RX6k`^4OCo9*}phP;M;L zpjf7d0PVIB@LC#Xx>0GXxMD5<5?#z>kuo63S+CNqr$L{eP#IpM+6hdzsO@RlG)5{L zMx(sh)e@V219Gqko}~&3GDiR^+{Q^ivD2O9&R7(>K>e7VT#V4<(F65JwrPGMBGv)i)68D9JN|Kn_R;xq#NRv zRM9mEyGFiV@dM+|A59P*-@Y4pwAoeZmC2pv`|7kRMM*e)Wm|&(Ga>dPiC|nK9FNat zJuQ`XOe36~riU6CIHNsfZG(Vu3$jLV(h~YT2a&sxCqMe!0j*y(47{^ckmC}m1N`nK zjK5*fGb_Y;{8@)rkQl8^>A&tq_@W-V7tDfq}x#hsmA;`Bcp=(gz5A904z6 zc!|!Ui_zUfle0+Gt?J5d;@5GCX61xB9BuUw zwo2swnGw=zP>e;wvEcla+tyV!l5@*nzPbHGJj`UIY`*^c5ThcvM3hDcbBbQ98ihWH z$I&k9X@Qp%MUAf>UnZ&GG~R{%UuoyWIM+0b>>!E!XN6xFyt5BzTPcJ(gsAK&;yQW{FutvN+~X18 zZB&b)4yejnghfTAP8XAC;K+%5NKix@2tLPJwMIFy2%^~E-u*G4nJ8iw$>k%FA0xbc zJiO~bJ_VAsr_3Vn9|QV768$;)U8b8xc19n_fk;;1f`gH~j&8YG3%qMYcBH?LK*l0* zqNBBphAXvz2d{QQ)EaTLk4Wcz4D7#7qRm&kA+o6&xy^`pum>{vNDSvAk;|jov(fOT zKkVu27yla8x2sVmajnjYawFN*yhS%3TAiHbL?V?)s*`^Wg;RaLJQW@N*S{LGyD z%IMju$Osm^$Kl=C2$hT5D(|d{_^9;WMVw;t%w7qzvbo>Ldv4?jqI{^zdL?pK;k%W4 zsOpWG^H=%E)pNjox4RiHJ5h3Ff6mR=3VvK|Cq+1#wfS6|2PV$~HNDX^U|`>#PFzISUoq zc8cAi_hdI5z;hh6nGRP@`e7sVnss%`o~zQod;Y7O##vj1-8xFo`4kjtTO^=n$Ah!A zv8yq5J*>XF6+Z7)7Xz9ndI-$n3Z+JV=U!Q{c1#GA=p70rD^$P@^ttMp%CH?}2#_=2 z#mO^t(?%3WCVOU)eu*Qz$k;y9LFq6aqWqb-h_Qrf*hmI zs3K{O)9@dIw?HwPsBY*U4zjvK6`^jCtHgc8WZf4q5w5Cyo|6{)JX*hkO&Jk>aY8MQG==LY;qNDUnX5D(68BAc!ed5b`9oX{r5woi;(rKr)Z zsO64Q;58BsjQFBLm~4ngR^ZmaM{0k2=3z!Xk7U1x;IJHnwK`Fgtc4vgZXq`+IQW1* zU?Vg14#HfApga#jaYRb%9N=~InXK3{Yd^-W_#I>D+U6;0RoKO7o13)lK;Y=M#Gq$R;UUmUW~dxV&?0Lm)-E&x(Sc_AAc}f7LFQlE&Ruy;F@i?t^GFMa z7)4|bjC!lZbZW#uSuuHrV+3cBIg`~f=Pj{mGN<<1wvt6xv$mm8^qRG!jE0@C!eBhu z9uUq4h;Jg*fYRglKEz<%@n}GQTsGA)9(Nh_h&>X*JV+$&BO&&yaoq;U1;*VLTH^Ia z!aOo8M+ViIL_#tJ0phr@$x6%+>4B1J2_Zh7|Hr@p{|E$szbFYdMQ=m{(KQnSTFV4n z59s6ClXWDVK14+nO^W&ujM>P@>6dk!1D=c&G7{r(#D53kc3UUn4ldV<{jBGAM0eL7 zwZ|Ze`vL6+?8La=dJlyCnF#WagjYv~$TkVZLi z)qiL3^PU*vQN(lNfqVd_Jxy&d#5@+$ixO+oS9M4FOGJ~7l8b=dxBi$O&K~MNp zF)ByzI|hNdE6pksEwg^{C$t;#mIPI=eZM1{C+eos1DY6iH~ISG-w+ryi#%8Q1!s{h z2+vd-{a1h$CuI>s7ud+n>}o{CBQV!LRXNLORCX7==Irxogw66SIkb1eb!1(IZL(p*U6Vw<%LRL z(IAT~ay(n75DjZlY3vNvU7-;rWh#4*LZb?ucT@jlj@>n4AGHjPT79xH?;v|r^-Y8m zmb!LguGl&oR;K)3X(NgxiVs0PWbaXL6T4u$fap8t?4uxHH|?=#h#iQ-_T75F{_<}U zqpJy<$wKy7G*yY9sYMyl0Y#G#M;>sd=+$}bBfOnSWJ4J-9ytt3Lw{z7DUIUY=diu0 zzh}&cfnj_kXTtWvjJ}F7=QvVlV%TSfwBv+jG@=Ug3jZ=0pgNNf>4=@XiVMY|b-D(q z^pFX1meK%Y{}IoPriS+5-%M$;d{D*lg@|*<`B!DI%f|}exGmZmw4UIOzEyvo$r0u_ zG?ACp^FD(JFVo3Q#1{lw9N8CVVvIRC>o8>6h*wp;-UJ85kxPnggv;$ll=7R|WX+T{ zjy_bJwqXwRN8l(5=#Oqbeb(AK8>ys=`jpdU?d4P|E_#qH%biJOX=0pPL5N}LakpeTESQ|*i*dC>j zL~93eSTnpueA@{AGvk95k3{=bu4ggehwN$=0$l=m(Vdbjn9+sOnoXIe$WodzIg-(R z3!KjD=RXpCO&(9=k1X8M9THY5Cu@_93ZnbDUr)JEm4h;~o#EA_*mB_JM`9Oc(5 zPNG@_tQf@6h;rptO4a>+px2qPpW!c)=^x04fv^EPN{!5;9v=;i`ABTH=%)SVY^?&{4--e!tQn_+n zF|5MPl~N*ynWBPmJ+Nwz%Cpq#bSJk>O{u}ceY*R1^4XldL)e##%b9aw=_{CA=L)`b za|`d_6O}HV)Q?$ST6K=<_h-+rE#&iFqz4%EqMl)eCi|j2t7&Mfbl;4OQQzgJT~_H+ zl^t%{Nkngz^|2t^tjzy^Z)kSr3;*b0qy4RWvK~Q2Fm(HN9)Oo1fpVz(G?PNB9y3SbnTyY zO<|5p#!zjrUqH*7V}f}^mkqoy%vD^#3Wyo@GT{QFn%(tXs_+?!x-IX`El>M>eR08Gg!bk7{RR zX&Wt(10B3$%V<`@sAEej@W106JB~}1X4k>fd#OGA^}~M$+O-c*zuHv8=MLd0-(y0m zQcF+;L4 zS+FV}s#m%y-LmsnCd8>SL8U1tH44OO@9+!G?pU{bjqVtE%K4+n>y@;kiY#>t2GwWJ zrpu`G9m&Cw(Rzo@XG6m}YUxyf)(GJaT2PD7nJ%cvZ^vFz^`#Op!vZ{H&O93wH&a{; znEL7y@nDF|S_kr~Pd435?cTt8EM^CM2nL~&L>@(C5O|y{LXzP_xnB6dxOsh445bv` zvA(ofMC*Xo0ACr)srGyX;(p}WJ`vDJGd$-*j9x#|$Onl|c9CCzd>Bqf(@uZckum=v zL};V_wo2=%M(9$Bu#UcSB+oe#nqW@ls1N)jT^^$I*MfI9LHH}fs+erO@=#Pjgn*`4 zRHq^Dk*4G;PynBQ!P=-{ur5Gror;UxW~m;I<8UBv_oqw3b!>e25{a-LcG%&1RkC%PFd$Z>$MMizWP@O;)*>dG%CQ9ejy2@-{QAn()@4X_#E<_zS1#A8iR<|CRK(a}{t zs?Q!Neh_8+@n_^e4Lq&9`#f)wU_)%y` zaZnW}!Rb5f7)CIafLf)l7<(!Yx<+nQK`H?N)o51hJ)Bl#ZZ{8S=!8N~3Vpi47F8C( z;8{hdR1A34sZxz0#}Gn+51iT|RzCwnH>kruD)j2|tTUOF8RCqGm;(j#-4Nfa%0su) zh-!$UfL91Kq6To)z*hR1&r8VqdM$DtevwUwImlH89lH4ax`fHcH1Bo!R3R z(+6RIQHsNrUJpTtAHj38ygAmb<{02GqN7N_jIQl_z)u)_XT%o~-(6{bL=T5Sm)RLG zLo^yjaU^>fo!cn?8w0*;Mnt6#=u&aeJHg-RtVVPdrGr7(dsZuu(cxq5M!V<&=G;D} zh&;-kECnOO$)lVAw3>vBhDNdp7+-B?zmJ@fYs$%0=SF(CC$gdiKOfPrYM zgBT~7bAAlo(TN=aVgO+y|6}?379<>Pqc>Rq_q(PK9QNApT(2bOSB=|>d3ZpY-w9O19 zAa51L0t68774hWAap;C)-vr)3;yfbZ2PRwCjYKAU8yOlY7Q5``jufG2A9|+emK)nqe$Td%O@{y|O zv%NX3wN_2bxoZ#AHg+>>V^=or*}6GdFwa-%FS}~`Vx=wG%GPSmh+IcWDF&f(rYddD z;H1(o*QLKI&AQIXs)>4)Jj7Myz{kN*(0Nk1S4aw`%utFi=HgVPdD zU8kB~cN7?kwRcn2#oBzWn8sDfTdkaZOK_PPdQpcB_gr24V`9&kr13kZ(K&l|^8IF_ z-K%IUi*9FK3C_uV%$_&EJ0`gNyqZo}`_Yy3?C^FL`GVn4t3}IdemkSbnX_{BAZrm@ z)t9TMKt?Hz4z0NP%~{7R^%gJFGj0L?tg&95=vk#frT)TMhq^yNt1(apI*kTz{r3M) z#BD#CN%T&UMaGmLhO$(W-mf{kQ7`9geM(!DYkM`ee#W#}WGtFShQ!0GI!MfuJy7dn zF}lk97&s(~l6}mvn;kLTMSRT|K+Z_i8M>S`@Mj%QSFuIWm5+cXq6op&5mRJawytB+ zd33s{jD)vBr_mlN-3?Tlj-G!Ak*ArF@9x^0$)6dn9-XO!(DFg>rnHjG@Ny>a8C_Q& z!Dq78as38a=;+@j>YWI`*IEj--QhLZI59fVGNM zQpuuu7LIMgf}?G8`2W!pq7%=K%>7F5e)hhevDcpwpYOh>p9$xcG3xJ#+jrZ?tIlof znS0*Uha3O%|l2(#$vOn$gB(NV>RDjbz|WNvR;6y(R~ zEV51sS;WH07gSmWp><^jQQjqGeUN1n7C| ztlN##%fAQDQDsgh$C2QN?bng@>Y6G&;aLm8S^GpuE6L!1-ltvZO|IajQd5=h(e+vo^%F-uNv|$I;vu6gFPtn z!x;svo+WFaSD}N^=Nj2(^c_{6GWo%BwX=0xCoDEmwmEVT;9UVKxM~J{gV1Hx@~{=~ zoc+vkC?09~L_Ptn4L+;zO|-u-$J3y5#c+S*)zMU9bpo)<u`a+~2r zwJ#i8DI@KbR8d!sTwC@+aBi=(4DhM4jJBvQ{rbg!Y+C7VW#>%w^h`uNde)g7R<)|v zsjOBy7gRl`Nco(TcvqvE*QEO@4P^MN7NX65o<-c%A|c1y&Dzw>@DLlZ?a~cv3+eEz zTG)9<=N>GOg($33rRi#mE%m!A@EEni%Rq_Jk7)QD$aQscnHqrtc(IszYv>l3U-!78 z(+@M|SJ8+wL{x1na7|EYf2C zlj1=r)4o&#vU(k)60%Fsvz;lF-&YL5)4+q;HKkfegn~dp;a#)qVn)jyd8TR?lxODO z&URDCo{L3v-WSlLTDNRJ&fy$gew#=cVs|GoaNze9;vT8xnDi zXelkq*!9gQI(9&7pkD2*>@W|@FO05`dJ>HQya6QLc&8G%iHvx4^zG<;)c&7JF8YXu zmG*crqIj;rWCBac!FF>4Gnxd6{EUXwfY4Mlp(^6RQ{cxVkSlD2_2`-I*y|`2N$Cco zMoTiIi}BS+mH=^jiIWQqgT}kTtLiN!qx%uARJyN>F9z~X3!~dM_1%D_oMdb9}P>& z0&tPMXM6#~!{89u5ZQpBjE_gRThZQ6__x2K0WxX7^sj&XrvlMJG|*Ioq8ces#`wC? zalpH>cgAEhpqH=Dn=E158$N_DF&Mp{d0?rR2jkyF!fs8!G&^`4*jY_RAA_k%&>GF8<%Eh z(j3(RL<-%jvl&`qpsDXw4S%IzmdQ<~uhcVF^#nxvs_Fn3dfRctoIR?1=SJg4K~X2| zXOwGQZG*g`s8ub5|Lu?eOf+&3M0y|!eI>VXcCuOYjEbC$@U0kj zSxrGSuGiHkF!7}56=e{IqoMb#0FnG8|SL7-HmE9`4FWKxYI@zCoh{k8l@mcYjlUDz>xdRJY%QTr(0yH zw#8L%bKD7*S!$g^i!C`jB~lLquZ(9^{ql!V-hbL)*vLS2t_7T^(I{`ni9%NTN-Eco z(Z8ehR-$0);Z`FgfS)huMo`rVQPu{{%`bK%9WaH9+w;0&>?q2a1*#H{u85sZ zChTV8EGRRUd(9MSW;C#Aa*k3~dd{~1A6<}-2T^WSgPZY+8a=Fb>xpvbRb|)<^yuUk zGagduS54_rjRVyo&FVxHXSE^k9)f^2qZ*2ye5VoH#O)xZ>c=S1(ZOr36kQMK^)ae! zRE^H4<>d)2MFr4PG1cH$H{^YmFYVSBMfBIcMWFw4)Y?!v?NDZ0d?`xFy{ci+kI{AK zimGas_zn`enYk)s*E>#rs=@${L7NqoR@+fI?^BFQ2Ff_$>rs7WT{1UnQ=B+Xq0mT@Qwg3Aw;>)okYU32JC79KqE@62a%_%vcSN| zR~Ud5U4h`Yi^49dt_Ac0M@Ca42P4XrQX;&7mS)ffbUE@;9eRWy9Ne}@Y(3Yj(JZ2> zq-I1Nc18me)a&0X&fVxR>viqiYP3XtWKprGvfDA()#&vjU4A5ngOU@>D(-<=dJ`K; z<0#4wy_%oNvxu%nIoBsK>|7eoqRS$_TTUm`B< z>50J*71@l6zOI68lx%S&VCNpKUspj{D}TeN@Fb8=VPwUlkpdhUoUCX$Ql3EGJ~84y^}3t|2M)xYQ@;ND6T}k<9~Eol z>@YeV@z6n>%jj&??j!1LMkM!~!eb`_*arrQ(+MOq#+`INr5iyc2eKQ{=yRE~^o<6O zz+hrgezkyI9e$JDU^GFmvmEx(-?R38>W#oCXy&B(j9Rv_)_KepQls(Rz?5>^ehCJ6bSAV*CmkJifa`g%abjYRx1VssS?>r1RQBnOFrIfXWr z>!IsjA_7!;i9)#MQ42%dChBUNKp@ZKY$PhhicPYfu4>d-ZR?{JyD=rKo;!#$toAQv z{Z6wfj@hl#NEU(YE5b#jyqWCGj8@iXSRJI`7PVgG>XF>IWX`ABN|N!UQ=6jjNoLq* zH#dszi`LI_=CeXlCCbi>9L4yH9Ei$|Br~Wor(4azXB}FyTe(BPr(;KS!N_jJHX89f zOX*RH^&6pSm}_@(p%FM;N)fx;&QLMbE3)#t9R07q{MVwPv|{AzY+jcWNmZ}?6mLfL zumG)^Uu{RF=9N}PZ&o~DC*tGMiPIHj^%S%j`ktj_wGGwGTJIipeZudVtkQr|i2C?{ zB{HMp#2rlz(Gh0`aD@gdIA_5F2S-_sVWvz~r#5mh)UHGo{)mk4Y}gLq<%YAHk_ufa z(eb`OUa&T&S*?u|4ex~RfbsA)Rd2ZwYlfp4d7HJEWuwLKnhrXn+oQH|=S^!>)^k9+ zd7}2t*B}4Q6A*lN;l&;6$Kw68Nuf1^!`17ZaWd}OKxqpo~mKc7d-opvs?Yl z6>FY#6ji!#&wu54RC>X_(urGnUMtRbMG++y(b)<)a>rR$Tcf_(AatI+q96FX$6r_}On~HKOS#ePqOcQRHQ& z>&^kaa7w-Ph*B0*+2Ncm;C1Whghp9gOP1q$-OC5`-oR0zo0_9P!dW!X3dkd-N|CQ? zY(+fDc)khGR8kRLd4Cu*mF1hVbu03%4bD&<{XOEzLy%#IA)ggoe-Qas>DmIKp8&m; zT_5P!NanW-j{0DaQO|2P-?wVOs?#E)^UM0>Gy5!iS3{lxmElFT88UnHyHVc%Ejb*3 z_lF!UTAg-xhX=%jboHuZbp%x@l3VG`Ir)+m?|SsUtZ=dkpLK9~8U`1T7pIOUH)c7s zs`ol`&9)-##-R;|hN42SXIv?|d!M;}ba2Ny45>N6uZ%c3Edi@E_3SI@8QiK4IZS$} z8aY|My)y+B3wT$R;g0NdY!B6WS5j$!T742bOSNX~4jF!jY&Zv5plC@dkoKkQQRk<<-c9o1eL5)3IY1BXRB-O$!cM{boa?w$nVCd!!s*U;? zvqi-bm4dj+gtRC+=T0MI&Km11kkNhiF6BFbKS|Ol+K8gKtQfEn9s=?fccUnQQecwF z6s2Zi^z5iT6QFf9Vf>jHu~`w0Gj&oq=Z5(_W3?DixjD>a5L=_tPE(D}D)Jy|hj$L> zAsg@Bi40WEg$-pHMVghuvzEwrC78u>4N4SfCMzc&c!SvhR3*SI<&yvlQ{6fr5+4({Yd=Nh+) zCuho|6GdDRU7VR9I2#$dD{AQENzSbOj$sPU?^nnjMe$|yvLffN!i&{>dqsX%uD{*M zdb9G@E$&wJg<@DX@N^kdAo#f^A6wC@7+a#ex z1y-v-B|=ujsh(eTAc^|>EMLBIKH2(?!d@HUjlN)Q?0r>XIrFS0(9kNOzQT~~gnp3F z*o+`<6Q7%>Y+_1Uwu(1;vcp-Wd4Cs*}zRaZJThO*`^7-6e| z3Ch&kJA+!Q_SOvETA^1O!?FqV614$j6O@i3lPlv#8xhP`dQ%LLsAXJK z3^6JwIuaaZQ=^ozwIbjz%E*bh>Wog- zr0Ssv|0Ab0b9&V=-chHVQ3sM}0x#=;(4pl-_rPIiy|*(X>NIK5on)FluOb_>KqYgE zBbftuQ~WAjepqLX4!>he6pTC*9=iqx&nw@4{qTPljLwLN&%zY~^WN1fjghydM!f;8 zfqdl6u!6bBi(;*>lyxd2WIOT!3!`&51uuPM)H|)!AP8+1u^f#Iu2kmsz!}NfGG_gc zv!1Nkt;6H@|0FPc55qypMp-k1XQX&DC)kOUW(9N|dP}M-aj53Qx&2C1N|77Pc!Q}ARu#}GauS5kTOwPsNLm*idgrQLx!LVOWKeC{ zctC4$=g>Ta$h3<;)lTV&gUbv>#pW3Wr$)HFes09u*)8T7=**Gvc?ibvx4(Z3_I@Hx zjda>Z0_*dbS#yk;u3W$W;(rl5c_oT*UHB;a!=j+ftBM5HiG0diW-MN(7gieGkD}s@ z7&Dz1>nu+v6X5Pp5mw0!V!$fO_VM>0iSyGE0ifpXM)Y=F^O?|f_Ix$~hvAMzf<}hX z5g5qlAhMIu{bAhHoC$qqMN^Stc5pj7vlDS&+{m#~d*Swg<{Tc$ZWtQ${-ul`Alyc= zh!TrZMoz``M&l?rv}#uZMdx$_-yvNV_`1{7{#6NJO=#GjGKTV9e@4feVp`kvejL_#%-j7U|1L!4W~P`$%&!QWC~B4wi`sTZxfaUCOsf^%&Qv#+ z>zoxaWRu0z!WI+^+w1!gDAv=&gQ6%DrKsW=&{Ho|XTyoMsv}xQk#W_-HD>S5y54N`pk34jOG?Z zF+hZcnx}bUoYtU3|Dskgrx1zEqOGbC?~KMAG3t>-M-`!!t(RS8M#U~lt38&U)5Pd6 zNMxJ!_3hwSpMX}m9kmMUiP06&AOt))g*}zxIK^O4gkLY>mO*selsTm=`f~^}668EG zUSLI)qo^vo!BL`PO5f?M;4w3>vU6ks3?(JZalqVR6l_gBaF%Ph|iE6LQLxX!g#Y;F-~j@^_~faW)jAGA!niFGhtu3_nWW zbC`Uk4F1US;Mm$n^s72+Syu{YtT&*gWU)w%ay}}}WO6l1x#{Aw8ljIS$g8YF5X-Gq za&H^Ckx}T%kyjn@7;Ywuy0~t&n2yO9R#dD8C=|Roe4)s76wWB(A4We{oeE(ek^E|c zJY+`w#vP@SdM)RK)T0 zt25vgM(w6RQxqmEN>B@Bl)UcjFe_JJ>Xnh&)7ZTl0sNu^mZy{nV~4h!b-;)mvD*Ws z$FfrFsHBM~SF>u5S+(7q(w?wF_rRJ_$?CPOBNvsPt)tWvHe5+9Bvhi_OrD_dT*g1G zpc5cEd4OJMm)#ZtTFN173kN~2GrYj$v6(2Rv$l#ZXLPEhT&nV(eIL+@lGPsYK%Cm3 zM8j3P1!O<&8DuFKPTy^1(3aX_QAxE`&Z&v=6NJV9UabFH4)p(N8pAM*%L*t6SH?2C zeKR32OQrW?b^lK9O4hemB_#D7ER~>5oVhX?OPTDJMaEu9+mT{dQVeGLWoG!kPKIM$ zM_9B(oo>dWmUlu&t^0%u&a^Go$8@#}M5TA_oqJv_JDuX_(f6`-ui`lsS5>_=gHLse zsxz%}C9Nrahb#E3+8}L`7g%Sr=v|CXTaorw;Yih=D*Y%1ZF>?84xj%CezkfCk&@9^ z$%+8a@=t(xL@Fz|J237f5nW}eeX1GZXVZ*WWc34HUfnnNNSN+G-uOH+fEbNLG~>3K z!o{=AqB`02?IAMXktovW`nef&%c4<_KR*N^&H7fV1u1OuW)t2OMPrm9Bw1uzyYtbin@-74>F^I<(#vQJXvr1 zCh|Ct_f}WOzB~Afh7JL7fiDtW5Vg@{5#dLid=&Sn$Ok2zQ8lcy+mDX~M?l`5R=p|9 z&UqwDD)nya+zB9VIh@J*EB}r1-IdmK4s?2+$uny!^+3MJJ5W`0) zW{cjZ>@_O}%alkaxUWSQ*W$2IJ3<7X&G^EBbK-{f_wWtKN)^1F9C`D|FT*&a2 zy(?=^+{0=4~*AlcUm{nn9PrJsqh#vFr@9*bJ{jXF*- zo^Zx(M>vmY02tRiWbe+N0}`}it?e>fqzmT|8PpL^u)RjO$@oV(r{D4T^~?Voagmxb zqa4WFYjvWiGX`;6m}SLBXF&WT1JG$@qj)himqz$ZM(_|AB5QLO?I&s@s75bfD7zyO zSR>^N60KBos3T)k72xbFvK-ry(aNH`ofs<(UM`>0-b(2b!03N;h9HKz5(#bs?v5tzRkb*92b@&u^0(>yS4$H)c|9mGIaajl%=h*sU(9<~28ged3e z><-frVS9(cFHT)e8|dQ(J>T^p!5hT@XDud`9N~t1k}jK$3W2`V$f#PEqy`}sqqkDK zpmfYoZKz0(BKbM9ht$cn?HYmpe*~*M>V?O=?~yTf{Xd|$kx_u0*j%LiiX&^m?M?fN|Q)DL7fIYk`wGqYMe?23Er@ zx$3MpaCQsS$(gFgJ2T*v{6rRIfS{P7D3=oPA4Sf4V)#d6lQTmrGiI`(6zsMnS|i~1 z#8+;lM(;b2w?I6Te?u^4PUOXwBV(!wHwFwh(Mb8|vnMg8BALZn$+5BKQP+)=(7{L# zWRc8F=QCr6(Jl+(W!L{$BwG0O_^%oGwU&1^@s607*qoM6N<$f+Syd`2YX_ literal 0 HcmV?d00001 diff --git a/assets/images/img_realtime_bg1.png b/assets/images/img_realtime_bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..be2cb6ffc2f3c00eb6e4b87a3832280b6ae325a4 GIT binary patch literal 9242 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 literal 0 HcmV?d00001 diff --git a/assets/images/img_realtime_bg2.png b/assets/images/img_realtime_bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb04c1293dc919d5c5a188929a453857e5a5723 GIT binary patch literal 5183 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 { //统计聊天时长 int startTime; + bool isTranslateButler; + + bool isTranslateButlerFinish=false;///翻译管家是否已经结束 + @override void dispose() { var endTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; @@ -86,7 +91,7 @@ class _ChatPageState extends State { msgMgr.off('New Chat Message', receiveMsg); msgMgr.off('Keyboard Hide', dealWithKeyboardHide); msgMgr.off('Delete Select Message', _deleteItem); - + msgMgr.off(MessageMgr.TRANSLATE_HK_END_CHAT, translateHKChatEnd); MsgHandler.curActiveSession = 0; SoundUtils().stop(); nickNameController.dispose(); @@ -102,6 +107,9 @@ class _ChatPageState extends State { getDefaultSetting(); getUserInfo(); + isTranslateButler = widget.isTranslateButler; + ///todo 这里再判断是否还在服务时间 + startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; msgList = ChatDataMgr().getRecord(); @@ -110,6 +118,13 @@ class _ChatPageState extends State { msgMgr.on('Keyboard Hide', dealWithKeyboardHide); msgMgr.on('Send CoinBag', _sendCoin); msgMgr.on('Delete Select Message', _deleteItem); + msgMgr.on(MessageMgr.TRANSLATE_HK_END_CHAT, translateHKChatEnd); + } + + translateHKChatEnd(args){ + setState(() { + isTranslateButlerFinish=true; + }); } void _sendFile(File file) async { @@ -353,7 +368,32 @@ class _ChatPageState extends State { color: Constants.BlackTextColor, fontSize: 16.47), ), - leading: CustomUI.buildCustomLeading(context), + leading: CustomUI.buildCustomLeading(context,onTap:(){ + if(isTranslateButler && !isTranslateButlerFinish){ + if(UserData().isTranslateUser){ + showToast('翻译服务未结束不能主动结束'); + }else{ + CustomUI.buildTowConfirm( + context, + '是否提前结束翻译管家服务?', + I18n.of(context).confirm, + (){ + setState(() { + isTranslateButlerFinish=true; + + }); + + MsgHandler.sendEndTransHKOrderReq(); + Navigator.of(context).pop(); + }, + '取消', + (){ Navigator.of(context).pop();}); + } + }else{ + Navigator.of(context).pop(); + } + + }), //todo titleSpacing: -10, centerTitle: false, elevation: 1, @@ -362,11 +402,11 @@ class _ChatPageState extends State { child: Column( children: [ NetStateWidget(), - widget.isTranslateButler + (isTranslateButler&!isTranslateButlerFinish) ? _buildTranslationButler() : Container(), Expanded(child: _buildMessageList()), - InputBar(sendMsg: sendMsg,isTranslateHK: widget.isTranslateButler,), + InputBar(sendMsg: sendMsg,isTranslateHK: isTranslateButler,), ], ))), behavior: HitTestBehavior.translucent, @@ -390,14 +430,14 @@ class _ChatPageState extends State { ); }, ))), -// widget.isTranslateButler ? getAudioChatView() : Container(), -// widget.isTranslateButler ? zoomAudioButton() : Container() + isTranslateButler ? getAudioChatView() : Container(), + isTranslateButler ? zoomAudioButton() : Container() ], ); } Widget getAudioChatView() { - if (friendInfo == null) { + if (friendInfo == null || isTranslateButlerFinish) { return Container(); } @@ -408,6 +448,7 @@ class _ChatPageState extends State { child: AudioChatPage( userInfo: friendInfo, isTranslateButler: true, + isReplay: !TranslateHKMgr().isUser, translateButlerCloseCallBack: audioChatPageCallBack, ), ); @@ -438,7 +479,7 @@ class _ChatPageState extends State { bool isShowZoomButton = true; GlobalKey mykey = GlobalKey(); - double dx = 0, dy = 0; + double dx = Screen.width , dy = Screen.height/2; double zoomButtonSize = 60; void dragEvent(DragUpdateDetails details) { @@ -447,7 +488,7 @@ class _ChatPageState extends State { dx = details.globalPosition.dx - mykey.currentContext.size.width / 2; dy = details.globalPosition.dy - mykey.currentContext.size.height / 2; - print('dx $dx dy $dy screen width:${Screen.width}'); +// print('dx $dx dy $dy screen width:${Screen.width}'); if (dx > Screen.width - zoomButtonSize) { dx = Screen.width - zoomButtonSize; @@ -465,21 +506,21 @@ class _ChatPageState extends State { } Widget zoomAudioButton() { - friendInfo == null - ? Container() - : AudioChatPage( - userInfo: friendInfo, - ); - if (friendInfo == null || !isShowZoomButton) { + + if (friendInfo == null || !isShowZoomButton || isTranslateButlerFinish) { return Container(); } Widget button = Container( key: mykey, - color: Colors.blue, - width: 60, - height: 60, + width: 57, + height: 74, + child: Card(child: Align(child: Icon( + IconData(0xe67d, fontFamily: Constants.IconFontFamily), + color: Color(0xFF008AFF), + size: 35.0, + ),alignment: Alignment.center,),), ); return GestureDetector( @@ -565,21 +606,25 @@ class _ChatPageState extends State { constraints: BoxConstraints(maxWidth: 135), ), ), - Expanded( + TranslateHKMgr().isUser?Expanded( child: Container( constraints: BoxConstraints(maxWidth: 130), width: double.maxFinite, child: CountDownButton( I18n.of(context).translation_butler_end_service, () { - Navigator.of(context).pop(); + +// Navigator.of(context).pop(); }, - countDownTime: 3600, + countDownTime: 60*5, align: Alignment.centerRight, - onPress: () {}, + onPress: () { + MsgHandler.sendEndTransHKOrderReq(); +// Navigator.of(context).pop(); + }, ), // alignment: Alignment(1,0), - )), + )):Container(), ], ), ); @@ -629,9 +674,6 @@ class _ChatPageState extends State { sendMsg(MsgModel msg) { -// if(widget.isTranslateButler){ ///翻译管家聊天通道 -// msg.channelType = ChatChannelType.TransHK.value; -// } print('对方是否拉黑你 ${friendInfo.isBlackened}'); if (BlacklistMgr.isBlack(friendInfo.userId)) { diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart index a6b9b52..6c46646 100644 --- a/lib/chat/ChatPageItem.dart +++ b/lib/chat/ChatPageItem.dart @@ -258,7 +258,6 @@ class _ChatPageItemState extends State } else { ///todo 翻译管家系统通知消息 - print('这里应该要有翻译管家'); if (type == ChatType.GroupChatNoticeType.value && widget.msg.channelType ==ChatChannelType.Session.value) { TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.msg.msgContent); @@ -1493,7 +1492,7 @@ class _ChatPageItemState extends State : I18n.of(context).translation_butler_evaluation_tips, textScaleFactor: 1.0, style: TextStyle( - color: AppColors.NewAppbarTextColor, fontSize: 13), + color: Color(0xFF797979), fontSize: 13), ) ], ), diff --git a/lib/chat/input_bar.dart b/lib/chat/input_bar.dart index ee4ff1a..e720750 100644 --- a/lib/chat/input_bar.dart +++ b/lib/chat/input_bar.dart @@ -1,10 +1,7 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; - -import 'package:chat/chat/ChatPageItem.dart'; import 'package:chat/chat/keyboard_icon.dart'; -import 'package:chat/chat/my_extended_text_selection_controls.dart'; import 'package:chat/chat/record_view.dart'; import 'package:chat/chat/util_keyboard.dart'; import 'package:chat/data/UserData.dart'; @@ -14,8 +11,6 @@ import 'package:chat/home/alter_select_view.dart'; import 'package:chat/models/ChatMsg.dart'; import 'package:chat/models/group_info_model.dart'; import 'package:chat/models/keyboard_provider.dart'; -import 'package:chat/photo/entity/options.dart'; -import 'package:chat/photo/photo.dart'; import 'package:chat/proto/all.pbserver.dart'; import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/MessageMgr.dart'; @@ -26,19 +21,16 @@ import 'package:chat/utils/keyboard_utils.dart'; import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/screen.dart'; import 'package:chat/utils/sound_util.dart'; -import 'package:extended_text_field/extended_text_field.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:multi_image_picker/multi_image_picker.dart'; import 'package:oktoast/oktoast.dart'; -import 'package:photo_manager/photo_manager.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'emoji_gif_text.dart'; import 'emoji_text.dart'; -import 'my_special_text_span_builder.dart'; class InputBar extends StatefulWidget { final Function sendMsg; @@ -743,13 +735,19 @@ class InputBarState extends State friendId = Provider.of(context); } + ChatChannelType channelType =isGroup ? ChatChannelType.Group : ChatChannelType.Session; + if(widget.isTranslateHK){ + channelType = ChatChannelType.TransHK; + print('聊天是 TransHK'); + } + print('群聊模式 $isGroup'); var msg = MsgHandler.createSendMsg( ChatType.ShortVoiceChatType, Uint8List(0), localFile: soundPath, friendId: friendId, extra: duration, - channelType: isGroup ? ChatChannelType.Group : ChatChannelType.Session); + channelType: channelType); widget.sendMsg(msg); } @@ -786,11 +784,16 @@ class InputBarState extends State friendId = Provider.of(context); } + ChatChannelType channelType =isGroup ? ChatChannelType.Group : ChatChannelType.Session; + if(widget.isTranslateHK){ + channelType = ChatChannelType.TransHK; + print('聊天是 TransHK'); + } var msg = MsgHandler.createSendMsg(ChatType.ImageChatType, sendImg, localFile: isNeedUpload ? imgFile.absolute.path : null, extra: aspectRatio, friendId: friendId, - channelType: isGroup ? ChatChannelType.Group : ChatChannelType.Session); + channelType: channelType); widget.sendMsg(msg); } diff --git a/lib/data/UserData.dart b/lib/data/UserData.dart index 21c800a..6a87e23 100644 --- a/lib/data/UserData.dart +++ b/lib/data/UserData.dart @@ -59,6 +59,7 @@ class UserData { bool stationOpenSwitch = true; //开启电台开关 bool myProgramOpenSwitch = true; //我的节目开关 bool nearbyOpenSwitch = true; //附近的人开关 + bool isTranslateUser = false ; List contactList = []; bool isInChina = false; int homemainIndex = 0; diff --git a/lib/data/translate_hk_data_mgr.dart b/lib/data/translate_hk_data_mgr.dart index b1e0b31..2356b42 100644 --- a/lib/data/translate_hk_data_mgr.dart +++ b/lib/data/translate_hk_data_mgr.dart @@ -31,17 +31,18 @@ class TranslateHKMgr { return _instance; } - TranslateOrder order; + TranslateOrder order; ///翻译官被指派的订单 - String orderId; + String orderId; ///用户发起的订单Id int waitNum=0; - bool isUser=false; + bool isUser=false; ///是用户或者翻译官 + - int orderStatus=0; + + int orderStatus=0; static const ORDER_STATUS_EMPTY=0; ///未创建订单 static const ORDER_STATUS_WAITING=1;///等待翻译官 - static const ORDER_STATUS_START=1;///翻译管家开始 } diff --git a/lib/home/audio_chat_view.dart b/lib/home/audio_chat_view.dart index f014f22..cc49c7e 100644 --- a/lib/home/audio_chat_view.dart +++ b/lib/home/audio_chat_view.dart @@ -217,10 +217,14 @@ class _AudioChatPageState extends State { isReply ? _replayToolBar() : _bottomToolBar(), ], ))), - widget.isTranslateButler?Material(child: InkWell(child: Container(color: Colors.yellow,width: 60,height: 60,),onTap: (){ + widget.isTranslateButler?InkWell(child: Container( width: 60,height: 60,child: Align(child: Icon( + IconData(0xe67f, fontFamily: Constants.IconFontFamily), + color: Colors.white, + size: 35.0, + ),alignment: Alignment.center,),),onTap: (){ widget.translateButlerCloseCallBack(1); print('内页内页'); - },),):Container() + },):Container() ], ))); } diff --git a/lib/home/homeMain.dart b/lib/home/homeMain.dart index 53da171..2cd3764 100644 --- a/lib/home/homeMain.dart +++ b/lib/home/homeMain.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:chat/chat/ChatPage.dart'; import 'package:chat/data/UserData.dart'; import 'package:chat/data/constants.dart'; +import 'package:chat/data/translate_hk_data_mgr.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/home/SystemEditPage.dart'; import 'package:chat/home/find_page.dart'; @@ -277,21 +278,44 @@ class _HomeMainState extends State { } receiveTranslateOrder(var data) async { - CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: data.orderId,scenes: data.scenes,desc: data.desc); + + TranslateOrder order = data; + + CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: order.orderId,scenes: order.scenes,desc: order.desc,createTime: order.createTime); } startTranslateHKChat(var friendID){ - Navigator.of(context).push( - new MaterialPageRoute( - builder: (context) { - return ChatPage( - key: Key('Chat'), - friendId: friendID, - isTranslateButler: true, - ); - }, - ), - ); + + if(TranslateHKMgr().isUser){ + CustomUI.buildTranslationHelperOrderDialog(context,true,userStartChat: (){ + Navigator.of(context).push( + new MaterialPageRoute( + builder: (context) { + return ChatPage( + key: Key('Chat'), + friendId: friendID, + isTranslateButler: true, + ); + }, + ), + ); + }); + }else{ + Navigator.of(context).push( + new MaterialPageRoute( + builder: (context) { + return ChatPage( + key: Key('Chat'), + friendId: friendID, + isTranslateButler: true, + ); + }, + ), + ); + } + + + } @@ -477,26 +501,26 @@ class _HomeMainState extends State { child: Container( // color: Colors.white, color: AppColors.NewAppbarBgColor, - child: Scaffold( - appBar: PreferredSize( - preferredSize: Size.fromHeight(1), - child: AppBar( - backgroundColor: AppColors.NewAppbarBgColor, - ), - ), + child: SafeArea(top: false,child: Scaffold( +// appBar: PreferredSize( +// preferredSize: Size.fromHeight(1), +//// child: AppBar( +//// backgroundColor: AppColors.NewAppbarBgColor, +//// ), +// ), resizeToAvoidBottomPadding: false, - body: SafeArea( - child: Stack( + body: Stack( alignment: AlignmentDirectional.bottomStart, children: [ Container( padding: EdgeInsets.only(bottom: 48), color: Constants.LightGreyBackgroundColor, child: SafeArea( + top: false, child: IndexedStack( - index: _currentIndex, - children: _pages, - )), + index: _currentIndex, + children: _pages, + )), ), Positioned( bottom: 0, @@ -529,7 +553,7 @@ class _HomeMainState extends State { type: myBottm.BottomNavigationBarType.fixed, fixedColor: const Color(AppColors.TabIconActive), items: - _navigationViews.map((NavigationIconView view) { + _navigationViews.map((NavigationIconView view) { return view.item; }).toList(), onTap: (int index) { diff --git a/lib/home/realtimehelper/real_time_helper_page.dart b/lib/home/realtimehelper/real_time_helper_page.dart index 322f695..d25ef1e 100644 --- a/lib/home/realtimehelper/real_time_helper_page.dart +++ b/lib/home/realtimehelper/real_time_helper_page.dart @@ -1,8 +1,12 @@ +import 'package:chat/data/UserData.dart'; import 'package:chat/home/realtimehelper/translation_butler_page.dart'; import 'package:chat/home/realtimehelper/travel_butler_page.dart'; import 'package:chat/models/group_info_model.dart'; +import 'package:chat/utils/HttpUtil.dart'; +import 'package:chat/utils/screen.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:oktoast/oktoast.dart'; import '../../data/constants.dart'; import '../../generated/i18n.dart'; @@ -20,6 +24,9 @@ class RealTimeHelperPage extends StatefulWidget { } class RealTimeHelperPageState extends State { + + bool isTranslateHKLogin = true; + @override void initState() { super.initState(); @@ -34,7 +41,7 @@ class RealTimeHelperPageState extends State { @override Widget build(BuildContext context) { Widget appBar = AppBar( - backgroundColor: AppColors.NewAppbarBgColor, + backgroundColor: Colors.white, title: Text( I18n.of(context).real_time_helper, textScaleFactor: 1.0, @@ -44,7 +51,90 @@ class RealTimeHelperPageState extends State { centerTitle: false, ); - return Scaffold( + + return UserData().isTranslateUser?Scaffold( +// appBar: appBar, + body: Container( + color: Color(0xffE8EAF0), + child: Stack( + children: [ + Container( + child: Image.asset( + R.assetsImagesImgRealtimeBg2, + width: MediaQuery.of(context).size.width, + height:250, + fit: BoxFit.cover, + ), + ), + Container( + child: Image.asset( + R.assetsImagesImgRealtimeBg1, + width: MediaQuery.of(context).size.width, + height:MediaQuery.of(context).padding.top+80, + fit: BoxFit.cover, + ), + ), + Container( + child: SafeArea( + child: ListView( + children: [ + Container( + alignment: Alignment.center, + child: fixedText('大神专属', color: Colors.white, fontSize: 21), + ), + UnconstrainedBox(child: InkWell(onTap: (){ + + HttpUtil().translateHKloginRecord(!isTranslateHKLogin,(){ + + isTranslateHKLogin = !isTranslateHKLogin; + setState(() { + }); + }); + + + + },child: Container( + alignment: Alignment.center, + padding: EdgeInsets.only(left: 11,right: 11,top: 3,bottom: 3), + decoration: BoxDecoration( + border: Border.all(color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, width: 1), + borderRadius: BorderRadius.circular(11)), + child: fixedText(isTranslateHKLogin?'开启接单':'未开启接单', color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, fontSize: 15), + ),),), + Container( + padding: EdgeInsets.only(left: 13,top: 20), + child: fixedText('实时帮', color: Colors.white, fontSize: 22,fontWeight: FontWeight.w700), + ), + helperCard(I18n.of(context).translation_butler, + R.assetsImagesImgTranslationButler, () { + if (UserData().isTranslateUser) { + showToast('翻译人员无法进入创建订单'); + } else { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => TranslationButlerPage(), + ), + ); + } + }, textColor: Color(0xff2685FA)), + helperCard(I18n.of(context).travel_butler, + R.assetsImagesImgTravelButler, () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => TravelButlerPage(), + ), + ); + }, textColor: Color(0xffff682d)), + SizedBox( + height: 15, + ), + ], + )), + ) + ], + ), + ), + ):Scaffold( appBar: appBar, body: SafeArea( child: Container( @@ -53,21 +143,21 @@ class RealTimeHelperPageState extends State { children: [ helperCard(I18n.of(context).translation_butler, R.assetsImagesImgTranslationButler, () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => TranslationButlerPage(), - ), - ); - },textColor: Color(0xff2685FA)), + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => TranslationButlerPage(), + ), + ); + },textColor: Color(0xff2685FA)), helperCard( I18n.of(context).travel_butler, R.assetsImagesImgTravelButler, - () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => TravelButlerPage(), - ), - ); - },textColor: Color(0xffff682d)), + () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => TravelButlerPage(), + ), + ); + },textColor: Color(0xffff682d)), SizedBox( height: 15, ), @@ -78,7 +168,8 @@ class RealTimeHelperPageState extends State { ); } - Widget helperCard(String title, String assets, Function callBack,{Color textColor }) { + Widget helperCard(String title, String assets, Function callBack, + {Color textColor}) { return InkWell( child: Container( margin: EdgeInsets.all(10), @@ -88,21 +179,24 @@ class RealTimeHelperPageState extends State { borderRadius: BorderRadius.circular(10), // side: BorderSide(color: Colors.green,width: 25), ), - child: Container(padding: EdgeInsets.all(10),child: Column( - children: [ - Image.asset( - assets, - ), - Padding( - padding: EdgeInsets.only(top: 15, bottom: 15), - child: Text( - title + ' >>', - textScaleFactor: 1.0, - style: TextStyle(color: textColor, fontSize: 20), + child: Container( + padding: EdgeInsets.all(10), + child: Column( + children: [ + Image.asset( + assets, ), - ) - ], - ),), + Padding( + padding: EdgeInsets.only(top: 15, bottom: 15), + child: Text( + title + ' >>', + textScaleFactor: 1.0, + style: TextStyle(color: textColor, fontSize: 20), + ), + ) + ], + ), + ), ), ), onTap: callBack, diff --git a/lib/home/realtimehelper/translation_butler_page.dart b/lib/home/realtimehelper/translation_butler_page.dart index 043e5d3..534a8a8 100644 --- a/lib/home/realtimehelper/translation_butler_page.dart +++ b/lib/home/realtimehelper/translation_butler_page.dart @@ -76,10 +76,25 @@ class TranslationButlerPageState extends State { refreshOrder(args){ orderStatus = TranslateHKMgr().orderStatus; - waitNum = TranslateHKMgr().waitNum; - waitTimer = Timer.periodic(Duration(seconds: 1), (Timer t) { - handleTick(); - }); + + + switch(orderStatus){ + case TranslateHKMgr.ORDER_STATUS_EMPTY: + isCreatingOrder=false; + waitTimer?.cancel(); + secondsPassed = 0; + SPUtils.save(Constants.TranslationHelper,null); + break; + case TranslateHKMgr.ORDER_STATUS_WAITING: + secondsPassed = 0; + waitNum = TranslateHKMgr().waitNum; + waitTimer = Timer.periodic(Duration(seconds: 1), (Timer t) { + handleTick(); + }); + break; + } + + setState(() {}); } @@ -130,7 +145,6 @@ class TranslationButlerPageState extends State { } secondsPassed = ((DateTime.now().millisecondsSinceEpoch ~/ 1000 - second)); - apply(); } else { print('time: null'); } @@ -145,7 +159,7 @@ class TranslationButlerPageState extends State { isCreatingOrder=true; MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); - + extraMsg=''; } @@ -712,36 +726,22 @@ class TranslationButlerPageState extends State { textScaleFactor: 1.0, style: TextStyle(color: Colors.white, fontSize: 19), ), - onPressed: () async { - await SPUtils.save(Constants.TranslationHelper, null); - setState(() { - orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; - waitTimer?.cancel(); - secondsPassed = 0; - MsgHandler.sendCancelTranslateOrder(); - - }); - }), + onPressed: cancelOrder ), ), - Container( - margin: EdgeInsets.only(left: 70, right: 70, top: 25), - height: 47, - child: RaisedButton( - color: Color(0xffB3B3B3), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - child: Text( - I18n.of(context).translation_butler_wait_service, - textScaleFactor: 1.0, - style: TextStyle(color: Colors.white, fontSize: 19), - ), - onPressed: () {}), - ) ], ); } + void cancelOrder()async { + await SPUtils.save(Constants.TranslationHelper, null); + setState(() { + TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; + refreshOrder(null); + MsgHandler.sendCancelTranslateOrder(); + }); + } + void handleTick() { setState(() { diff --git a/lib/home/realtimehelper/translation_evaluation_dialog.dart b/lib/home/realtimehelper/translation_evaluation_dialog.dart index 865f588..fcdda6e 100644 --- a/lib/home/realtimehelper/translation_evaluation_dialog.dart +++ b/lib/home/realtimehelper/translation_evaluation_dialog.dart @@ -1,6 +1,8 @@ import 'package:chat/data/constants.dart'; +import 'package:chat/data/translate_hk_data_mgr.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/r.dart'; +import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/screen.dart'; import 'package:flutter/material.dart'; @@ -38,11 +40,11 @@ class TravelEvaluationPageState extends State { // TODO: implement didChangeDependencies super.didChangeDependencies(); posList = [ - EvaluationBean(1, I18n.of(context).translation_pos_1), - EvaluationBean(2, I18n.of(context).translation_pos_2), - EvaluationBean(3, I18n.of(context).translation_pos_3), - EvaluationBean(4, I18n.of(context).translation_pos_4), - EvaluationBean(5, I18n.of(context).translation_pos_5), + EvaluationBean(6, I18n.of(context).translation_pos_1), + EvaluationBean(7, I18n.of(context).translation_pos_2), + EvaluationBean(8, I18n.of(context).translation_pos_3), + EvaluationBean(9, I18n.of(context).translation_pos_4), + EvaluationBean(10, I18n.of(context).translation_pos_5), ]; negList = [ @@ -54,6 +56,29 @@ class TravelEvaluationPageState extends State { ]; } + ///评价接口 + evaluationAPI(){ + + List list= isGood ? posList : negList; + String value=''; + for(int k=0;k { style: TextStyle(color: Colors.white, fontSize: 15,fontWeight: FontWeight.w500), ),), - onPressed:(){ - Navigator.of(context)..pop(); - } ), + onPressed:evaluationAPI ), ) ], @@ -242,6 +265,9 @@ class TravelEvaluationPageState extends State { ),); } + + + getItem(List posList) { List evaluationWidget = []; for (int k = 0; k < posList.length; k++) { diff --git a/lib/home/realtimehelper/translation_order_push_dialog.dart b/lib/home/realtimehelper/translation_order_push_dialog.dart new file mode 100644 index 0000000..5e37a87 --- /dev/null +++ b/lib/home/realtimehelper/translation_order_push_dialog.dart @@ -0,0 +1,200 @@ +import 'package:chat/data/constants.dart'; +import 'package:chat/data/translate_hk_data_mgr.dart'; +import 'package:chat/generated/i18n.dart'; +import 'package:chat/r.dart'; +import 'package:chat/utils/HttpUtil.dart'; +import 'package:chat/utils/MessageMgr.dart'; +import 'package:chat/utils/count_down_button.dart'; +import 'package:chat/utils/msgHandler.dart'; +import 'package:chat/utils/screen.dart'; +import 'package:flutter/material.dart'; + +///翻译管家-结束后评论弹窗 +class TranslateOrderPushPage extends StatefulWidget { + bool isUser; + String orderId; + int scenes; + + String desc; + Function userStartChat; + int createTime; + + TranslateOrderPushPage(this.isUser, + {this.orderId, + this.scenes, + this.desc, + this.userStartChat, + this.createTime}); + + @override + State createState() { + return TranslateOrderPushPageState(); + } +} + +class TranslateOrderPushPageState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); + } + + + + cancelOrder(args){ + Navigator.pop(context); + } + + @override + void dispose() { + // TODO: implement dispose + super.dispose(); + MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); + } + + @override + void didChangeDependencies() { + // TODO: implement didChangeDependencies + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + // TODO: implement build + var scenesList = [ + I18n.of(context).translation_scenes_1, + I18n.of(context).translation_scenes_2, + I18n.of(context).translation_scenes_3, + I18n.of(context).translation_scenes_4, + ]; + + String translateStr= '时间:今天11:45 时长:5${I18n.of(context).minute}'; + String userStr= '下单时间:今天11:45 等待时长:10分钟'; + + return UnconstrainedBox( + alignment: Alignment.topCenter, + child: InkWell( + onTap: () {}, + child: Container( + alignment: Alignment.topCenter, + +// height: 180, + width: Screen.width - 20, + margin: EdgeInsets.all(10), + child: Card( + elevation: 2, // 阴影 + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), +// side: BorderSide(color: Colors.green,width: 25), + ), + child: Container( +// color: Colors.yellow, + width: double.maxFinite, + padding: EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 15), + child: Text( + I18n.of(context).translation_butler_dialog_title, + textScaleFactor: 1.0, + textAlign: TextAlign.left, + style: TextStyle( + fontWeight: FontWeight.w500, + color: AppColors.NewAppbarTextColor, + fontSize: 17), + ), + ), + Text( + I18n.of(context).translation_butler_dialog_order.replaceAll( + '/s1', widget.isUser ? I18n.of(context).you : 'xxx'), + textScaleFactor: 1.0, + textAlign: TextAlign.left, + style: TextStyle( + color: AppColors.NewAppbarTextColor, fontSize: 14), + ), + SizedBox( + height: 10, + ), + Text( + widget.isUser?userStr: translateStr, + textScaleFactor: 1.0, + textAlign: TextAlign.left, + style: TextStyle(color: Color(0xFF797979), fontSize: 11), + ), + + widget.isUser + ? Container() + : Text( + '场景:${scenesList[widget.scenes]}', + textScaleFactor: 1.0, + textAlign: TextAlign.left, + style: + TextStyle(color: Color(0xFF797979), fontSize: 11), + ), + + widget.isUser + ? Container() + : Text( + '更多描述:${widget.desc}', + textScaleFactor: 1.0, + textAlign: TextAlign.left, + style: + TextStyle(color: Color(0xFF797979), fontSize: 11), + ), +// + Container( + margin: EdgeInsets.only( + left: 30, right: 30, top: 20, bottom: 10), + child: widget.isUser + ? Container( + margin: EdgeInsets.only(top: 10), + height: 36, + alignment: Alignment.center, + child: RaisedButton( + color: Color(0xff3875E9), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(10))), + child: Padding( + padding: EdgeInsets.only(left: 10, right: 10), + child: Text( + I18n.of(context) + .translation_butler_dialog_start_chat, + textScaleFactor: 1.0, + style: TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w500), + ), + ), + onPressed: () { + Navigator.of(context).pop(); + widget.userStartChat(); + }), + ) + : CountDownButton( + I18n.of(context) + .translation_butler_dialog_start_service, + () { + ///倒计时结束自动关闭 + Navigator.of(context).pop(); + }, + onPress: () { + ///发送确认接单 + MsgHandler.sendReceiveOrder(); + Navigator.of(context).pop(); + }, + ), + ) + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/home/realtimehelper/travel_butler_page.dart b/lib/home/realtimehelper/travel_butler_page.dart index 19ba83f..23b90e3 100644 --- a/lib/home/realtimehelper/travel_butler_page.dart +++ b/lib/home/realtimehelper/travel_butler_page.dart @@ -3,6 +3,7 @@ import 'package:chat/data/UserData.dart'; import 'package:chat/map/google_map_location_picker.dart'; import 'package:chat/map/location_result.dart'; import 'package:chat/models/group_info_model.dart'; +import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/screen.dart'; import 'package:chat/utils/separator_line.dart'; import 'package:flutter/cupertino.dart'; @@ -178,6 +179,9 @@ class TravelButlerPageState extends State { endResult.latLng.latitude, endResult.latLng.longitude); + + HttpUtil().userRanging(distanceB.toInt(),startResult.address,endResult.address); + setState(() { }); } diff --git a/lib/proto/transhousekeeper.pb.dart b/lib/proto/transhousekeeper.pb.dart index 13d5d7f..e894ef5 100644 --- a/lib/proto/transhousekeeper.pb.dart +++ b/lib/proto/transhousekeeper.pb.dart @@ -202,6 +202,64 @@ class CancellationTransHKOrderRes extends $pb.GeneratedMessage { void clearOrderId() => clearField(2); } +class EndTransHKOrderReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('EndTransHKOrderReq', package: const $pb.PackageName('yl_pb')) + ..aOS(1, 'orderId') + ..hasRequiredFields = false + ; + + EndTransHKOrderReq._() : super(); + factory EndTransHKOrderReq() => create(); + factory EndTransHKOrderReq.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EndTransHKOrderReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + EndTransHKOrderReq clone() => EndTransHKOrderReq()..mergeFromMessage(this); + EndTransHKOrderReq copyWith(void Function(EndTransHKOrderReq) updates) => super.copyWith((message) => updates(message as EndTransHKOrderReq)); + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static EndTransHKOrderReq create() => EndTransHKOrderReq._(); + EndTransHKOrderReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + static EndTransHKOrderReq getDefault() => _defaultInstance ??= create()..freeze(); + static EndTransHKOrderReq _defaultInstance; + + $core.String get orderId => $_getS(0, ''); + set orderId($core.String v) { $_setString(0, v); } + $core.bool hasOrderId() => $_has(0); + void clearOrderId() => clearField(1); +} + +class EndTransHKOrderRes extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo('EndTransHKOrderRes', package: const $pb.PackageName('yl_pb')) + ..a<$core.int>(1, 'errorCode', $pb.PbFieldType.O3) + ..aOS(2, 'orderId') + ..hasRequiredFields = false + ; + + EndTransHKOrderRes._() : super(); + factory EndTransHKOrderRes() => create(); + factory EndTransHKOrderRes.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EndTransHKOrderRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + EndTransHKOrderRes clone() => EndTransHKOrderRes()..mergeFromMessage(this); + EndTransHKOrderRes copyWith(void Function(EndTransHKOrderRes) updates) => super.copyWith((message) => updates(message as EndTransHKOrderRes)); + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static EndTransHKOrderRes create() => EndTransHKOrderRes._(); + EndTransHKOrderRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + static EndTransHKOrderRes getDefault() => _defaultInstance ??= create()..freeze(); + static EndTransHKOrderRes _defaultInstance; + + $core.int get errorCode => $_get(0, 0); + set errorCode($core.int v) { $_setSignedInt32(0, v); } + $core.bool hasErrorCode() => $_has(0); + void clearErrorCode() => clearField(1); + + $core.String get orderId => $_getS(1, ''); + set orderId($core.String v) { $_setString(1, v); } + $core.bool hasOrderId() => $_has(1); + void clearOrderId() => clearField(2); +} + class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeliveryTransHKOrderPush', package: const $pb.PackageName('yl_pb')) ..aOS(1, 'orderId') @@ -283,6 +341,8 @@ class TransHKChatNotice extends $pb.GeneratedMessage { ..e(1, 'noticeType', $pb.PbFieldType.OE, TransHKChatNoticeType.StartChat, TransHKChatNoticeType.valueOf, TransHKChatNoticeType.values) ..a<$0.BaseUserInfo>(2, 'operatuId', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) ..pc<$0.BaseUserInfo>(3, 'operateduId', $pb.PbFieldType.PM,$0.BaseUserInfo.create) + ..a<$0.BaseUserInfo>(4, 'inter', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) + ..a<$0.BaseUserInfo>(5, 'employer', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) ..hasRequiredFields = false ; @@ -311,5 +371,15 @@ class TransHKChatNotice extends $pb.GeneratedMessage { void clearOperatuId() => clearField(2); $core.List<$0.BaseUserInfo> get operateduId => $_getList(2); + + $0.BaseUserInfo get inter => $_getN(3); + set inter($0.BaseUserInfo v) { setField(4, v); } + $core.bool hasInter() => $_has(3); + void clearInter() => clearField(4); + + $0.BaseUserInfo get employer => $_getN(4); + set employer($0.BaseUserInfo v) { setField(5, v); } + $core.bool hasEmployer() => $_has(4); + void clearEmployer() => clearField(5); } diff --git a/lib/proto/transhousekeeper.pbjson.dart b/lib/proto/transhousekeeper.pbjson.dart index aad108a..b05cd9a 100644 --- a/lib/proto/transhousekeeper.pbjson.dart +++ b/lib/proto/transhousekeeper.pbjson.dart @@ -71,6 +71,21 @@ const CancellationTransHKOrderRes$json = const { ], }; +const EndTransHKOrderReq$json = const { + '1': 'EndTransHKOrderReq', + '2': const [ + const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'}, + ], +}; + +const EndTransHKOrderRes$json = const { + '1': 'EndTransHKOrderRes', + '2': const [ + const {'1': 'ErrorCode', '3': 1, '4': 1, '5': 5, '10': 'ErrorCode'}, + const {'1': 'OrderId', '3': 2, '4': 1, '5': 9, '10': 'OrderId'}, + ], +}; + const DeliveryTransHKOrderPush$json = const { '1': 'DeliveryTransHKOrderPush', '2': const [ @@ -95,6 +110,8 @@ const TransHKChatNotice$json = const { const {'1': 'NoticeType', '3': 1, '4': 1, '5': 14, '6': '.yl_pb.TransHKChatNoticeType', '10': 'NoticeType'}, const {'1': 'OperatuId', '3': 2, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperatuId'}, const {'1': 'OperateduId', '3': 3, '4': 3, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperateduId'}, + const {'1': 'Inter', '3': 4, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Inter'}, + const {'1': 'Employer', '3': 5, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Employer'}, ], }; diff --git a/lib/proto/transhousekeeper.proto b/lib/proto/transhousekeeper.proto old mode 100755 new mode 100644 index 3269413..560662f --- a/lib/proto/transhousekeeper.proto +++ b/lib/proto/transhousekeeper.proto @@ -13,7 +13,6 @@ enum TransHKOrderState{ Completed = 5; //已完成 } -//comid = 3 enum TransHKChatNoticeType{ StartChat = 1; //开始 EndChat = 2; //结束 @@ -55,7 +54,16 @@ message CancellationTransHKOrderRes { optional string OrderId = 2; //订单号 } +//Msg= 7 结束订单请求 +message EndTransHKOrderReq{ + optional string OrderId = 1; //订单号 +} +//Msg= 8 结束订单请求回应 +message EndTransHKOrderRes{ + optional int32 ErrorCode = 1; //详见错误码文档 + optional string OrderId = 2; //订单号 +} //Msg= 20 派送订单推送 message DeliveryTransHKOrderPush { @@ -77,4 +85,6 @@ message TransHKChatNotice { optional TransHKChatNoticeType NoticeType = 1; //公告类型 optional BaseUserInfo OperatuId = 2; //操作用户Id repeated BaseUserInfo OperateduId = 3; //被操作用户Ids 有可能是多人 + optional BaseUserInfo Inter = 4; //翻译官 + optional BaseUserInfo Employer = 5; //客户 } \ No newline at end of file diff --git a/lib/r.dart b/lib/r.dart index 3266174..700e20e 100644 --- a/lib/r.dart +++ b/lib/r.dart @@ -1,526 +1,532 @@ class R { - /// ![](http://127.0.0.1:4343/assets/images/bofang.png) + /// ![](http://127.0.0.1:3132/assets/images/img_realtime_bg2.png) + static final String assetsImagesImgRealtimeBg2 = 'assets/images/img_realtime_bg2.png'; + /// ![](http://127.0.0.1:3132/assets/images/bofang.png) static final String assetsImagesBofang = 'assets/images/bofang.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_quick_search.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_quick_search.png) static final String assetsImagesIcQuickSearch = 'assets/images/ic_quick_search.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_temp_share.png) + /// ![](http://127.0.0.1:3132/assets/images/img_temp_share.png) static final String assetsImagesImgTempShare = 'assets/images/img_temp_share.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_tag.png) + /// ![](http://127.0.0.1:3132/assets/images/img_realtime_bg1.png) + static final String assetsImagesImgRealtimeBg1 = 'assets/images/img_realtime_bg1.png'; + /// ![](http://127.0.0.1:3132/assets/images/ic_tag.png) static final String assetsImagesIcTag = 'assets/images/ic_tag.png'; - /// ![](http://127.0.0.1:4343/assets/images/default_nor_avatar.png) + /// ![](http://127.0.0.1:3132/assets/images/default_nor_avatar.png) static final String assetsImagesDefaultNorAvatar = 'assets/images/default_nor_avatar.png'; - /// ![](http://127.0.0.1:4343/assets/images/server_icon.png) + /// ![](http://127.0.0.1:3132/assets/images/server_icon.png) static final String assetsImagesServerIcon = 'assets/images/server_icon.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_public_account.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_public_account.png) static final String assetsImagesIcPublicAccount = 'assets/images/ic_public_account.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_feeds.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_feeds.png) static final String assetsImagesIcFeeds = 'assets/images/ic_feeds.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_bg_1.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_bg_1.png) static final String assetsImagesDailyBg1 = 'assets/images/daily_bg_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_no.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_no.png) static final String assetsImagesImgTranslationNo = 'assets/images/img_translation_no.png'; - /// ![](http://127.0.0.1:4343/assets/images/yqm_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/img_check_photo_bg.png) + static final String assetsImagesImgCheckPhotoBg = 'assets/images/img_check_photo_bg.png'; + /// ![](http://127.0.0.1:3132/assets/images/yqm_bg.png) static final String assetsImagesYqmBg = 'assets/images/yqm_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_bg_2.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_bg_2.png) static final String assetsImagesDailyBg2 = 'assets/images/daily_bg_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_excel.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_excel.png) static final String assetsImagesExtExcel = 'assets/images/ext_excel.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_fyj.png) + /// ![](http://127.0.0.1:3132/assets/images/img_fyj.png) static final String assetsImagesImgFyj = 'assets/images/img_fyj.png'; - /// ![](http://127.0.0.1:4343/assets/images/right_gray.png) + /// ![](http://127.0.0.1:3132/assets/images/right_gray.png) static final String assetsImagesRightGray = 'assets/images/right_gray.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_group_chat.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_group_chat.png) static final String assetsImagesIcGroupChat = 'assets/images/ic_group_chat.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_temp_see.png) + /// ![](http://127.0.0.1:3132/assets/images/img_temp_see.png) static final String assetsImagesImgTempSee = 'assets/images/img_temp_see.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_pdf.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_pdf.png) static final String assetsImagesExtPdf = 'assets/images/ext_pdf.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_ppt.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_ppt.png) static final String assetsImagesExtPpt = 'assets/images/ext_ppt.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_mini_program.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_mini_program.png) static final String assetsImagesIcMiniProgram = 'assets/images/ic_mini_program.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_shake_phone.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_shake_phone.png) static final String assetsImagesIcShakePhone = 'assets/images/ic_shake_phone.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_no_p.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_no_p.png) static final String assetsImagesImgTranslationNoP = 'assets/images/img_translation_no_p.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_game_entry.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_game_entry.png) static final String assetsImagesIcGameEntry = 'assets/images/ic_game_entry.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_yes.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_yes.png) static final String assetsImagesImgTranslationYes = 'assets/images/img_translation_yes.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_icon.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_icon.png) static final String assetsImagesDailyIcon = 'assets/images/daily_icon.png'; - /// ![](http://127.0.0.1:4343/assets/images/left_gray.png) + /// ![](http://127.0.0.1:3132/assets/images/left_gray.png) static final String assetsImagesLeftGray = 'assets/images/left_gray.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_social_circle.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_social_circle.png) static final String assetsImagesIcSocialCircle = 'assets/images/ic_social_circle.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_apk.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_apk.png) static final String assetsImagesExtApk = 'assets/images/ext_apk.png'; - /// ![](http://127.0.0.1:4343/assets/images/svip.png) + /// ![](http://127.0.0.1:3132/assets/images/svip.png) static final String assetsImagesSvip = 'assets/images/svip.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_qrcode_preview_tiny.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_qrcode_preview_tiny.png) static final String assetsImagesIcQrcodePreviewTiny = 'assets/images/ic_qrcode_preview_tiny.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_tran_icon.png) + /// ![](http://127.0.0.1:3132/assets/images/img_tran_icon.png) static final String assetsImagesImgTranIcon = 'assets/images/img_tran_icon.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_album.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_album.png) static final String assetsImagesIcAlbum = 'assets/images/ic_album.png'; - /// ![](http://127.0.0.1:4343/assets/images/zhiwen.png) + /// ![](http://127.0.0.1:3132/assets/images/zhiwen.png) static final String assetsImagesZhiwen = 'assets/images/zhiwen.png'; - /// ![](http://127.0.0.1:4343/assets/images/net_error.png) + /// ![](http://127.0.0.1:3132/assets/images/net_error.png) static final String assetsImagesNetError = 'assets/images/net_error.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_emotions.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_emotions.png) static final String assetsImagesIcEmotions = 'assets/images/ic_emotions.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_video.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_video.png) static final String assetsImagesExtVideo = 'assets/images/ext_video.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_word.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_word.png) static final String assetsImagesExtWord = 'assets/images/ext_word.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_temp_hy.png) + /// ![](http://127.0.0.1:3132/assets/images/img_temp_hy.png) static final String assetsImagesImgTempHy = 'assets/images/img_temp_hy.png'; - /// ![](http://127.0.0.1:4343/assets/images/hand.png) + /// ![](http://127.0.0.1:3132/assets/images/hand.png) static final String assetsImagesHand = 'assets/images/hand.png'; - /// ![](http://127.0.0.1:4343/assets/images/qianbao_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/qianbao_bg.png) static final String assetsImagesQianbaoBg = 'assets/images/qianbao_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_splash_3.png) + /// ![](http://127.0.0.1:3132/assets/images/img_splash_3.png) static final String assetsImagesImgSplash3 = 'assets/images/img_splash_3.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_update_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/img_update_bg.png) static final String assetsImagesImgUpdateBg = 'assets/images/img_update_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_btn_1.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_btn_1.png) static final String assetsImagesDailyBtn1 = 'assets/images/daily_btn_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_4.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_4.png) static final String assetsImagesChatItem4 = 'assets/images/chat_item_4.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_5.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_5.png) static final String assetsImagesChatItem5 = 'assets/images/chat_item_5.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_people_nearby.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_people_nearby.png) static final String assetsImagesIcPeopleNearby = 'assets/images/ic_people_nearby.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_splash_2.png) + /// ![](http://127.0.0.1:3132/assets/images/img_splash_2.png) static final String assetsImagesImgSplash2 = 'assets/images/img_splash_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_tx_news.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_tx_news.png) static final String assetsImagesIcTxNews = 'assets/images/ic_tx_news.png'; - /// ![](http://127.0.0.1:4343/assets/images/service_icon.png) + /// ![](http://127.0.0.1:3132/assets/images/service_icon.png) static final String assetsImagesServiceIcon = 'assets/images/service_icon.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_btn_2.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_btn_2.png) static final String assetsImagesDailyBtn2 = 'assets/images/daily_btn_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_7.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_7.png) static final String assetsImagesChatItem7 = 'assets/images/chat_item_7.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_temp_qb.png) + /// ![](http://127.0.0.1:3132/assets/images/img_temp_qb.png) static final String assetsImagesImgTempQb = 'assets/images/img_temp_qb.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_travel_butler.png) + /// ![](http://127.0.0.1:3132/assets/images/img_travel_butler.png) static final String assetsImagesImgTravelButler = 'assets/images/img_travel_butler.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_6.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_6.png) static final String assetsImagesChatItem6 = 'assets/images/chat_item_6.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_long_index.png) + /// ![](http://127.0.0.1:3132/assets/images/img_long_index.png) static final String assetsImagesImgLongIndex = 'assets/images/img_long_index.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_splash_1.png) + /// ![](http://127.0.0.1:3132/assets/images/img_splash_1.png) static final String assetsImagesImgSplash1 = 'assets/images/img_splash_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_yes_p.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_yes_p.png) static final String assetsImagesImgTranslationYesP = 'assets/images/img_translation_yes_p.png'; - /// ![](http://127.0.0.1:4343/assets/images/daily_coin.png) + /// ![](http://127.0.0.1:3132/assets/images/daily_coin.png) static final String assetsImagesDailyCoin = 'assets/images/daily_coin.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_new_friend.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_new_friend.png) static final String assetsImagesIcNewFriend = 'assets/images/ic_new_friend.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_settings.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_settings.png) static final String assetsImagesIcSettings = 'assets/images/ic_settings.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_cards_wallet.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_cards_wallet.png) static final String assetsImagesIcCardsWallet = 'assets/images/ic_cards_wallet.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_2.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_2.png) static final String assetsImagesChatItem2 = 'assets/images/chat_item_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_3.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_3.png) static final String assetsImagesChatItem3 = 'assets/images/chat_item_3.png'; - /// ![](http://127.0.0.1:4343/assets/images/robot.jpg) + /// ![](http://127.0.0.1:3132/assets/images/robot.jpg) static final String assetsImagesRobot = 'assets/images/robot.jpg'; - /// ![](http://127.0.0.1:4343/assets/images/ext_sound.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_sound.png) static final String assetsImagesExtSound = 'assets/images/ext_sound.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_zip.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_zip.png) static final String assetsImagesExtZip = 'assets/images/ext_zip.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat_item_1.png) + /// ![](http://127.0.0.1:3132/assets/images/chat_item_1.png) static final String assetsImagesChatItem1 = 'assets/images/chat_item_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_temp_qd.png) + /// ![](http://127.0.0.1:3132/assets/images/img_temp_qd.png) static final String assetsImagesImgTempQd = 'assets/images/img_temp_qd.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_butler.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_butler.png) static final String assetsImagesImgTranslationButler = 'assets/images/img_translation_butler.png'; - /// ![](http://127.0.0.1:4343/assets/images/left_white.png) + /// ![](http://127.0.0.1:3132/assets/images/left_white.png) static final String assetsImagesLeftWhite = 'assets/images/left_white.png'; - /// ![](http://127.0.0.1:4343/assets/images/voucher.png) + /// ![](http://127.0.0.1:3132/assets/images/voucher.png) static final String assetsImagesVoucher = 'assets/images/voucher.png'; - /// ![](http://127.0.0.1:4343/assets/images/VIP.png) + /// ![](http://127.0.0.1:3132/assets/images/VIP.png) static final String assetsImagesVIP = 'assets/images/VIP.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_wallet.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_wallet.png) static final String assetsImagesIcWallet = 'assets/images/ic_wallet.png'; - /// ![](http://127.0.0.1:4343/assets/images/right_white.png) + /// ![](http://127.0.0.1:3132/assets/images/right_white.png) static final String assetsImagesRightWhite = 'assets/images/right_white.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_collections.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_collections.png) static final String assetsImagesIcCollections = 'assets/images/ic_collections.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_show_2_4.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_show_2_4.png) static final String assetsImagesGiftShow24 = 'assets/images/gift_show_2_4.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_wx_games.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_wx_games.png) static final String assetsImagesIcWxGames = 'assets/images/ic_wx_games.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_shopping.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_shopping.png) static final String assetsImagesIcShopping = 'assets/images/ic_shopping.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_fengchao.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_fengchao.png) static final String assetsImagesIcFengchao = 'assets/images/ic_fengchao.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_file_transfer.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_file_transfer.png) static final String assetsImagesIcFileTransfer = 'assets/images/ic_file_transfer.png'; - /// ![](http://127.0.0.1:4343/assets/images/suo.png) + /// ![](http://127.0.0.1:3132/assets/images/suo.png) static final String assetsImagesSuo = 'assets/images/suo.png'; - /// ![](http://127.0.0.1:4343/assets/images/red_packet_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/red_packet_bg.png) static final String assetsImagesRedPacketBg = 'assets/images/red_packet_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_show_2_3.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_show_2_3.png) static final String assetsImagesGiftShow23 = 'assets/images/gift_show_2_3.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_unknown.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_unknown.png) static final String assetsImagesExtUnknown = 'assets/images/ext_unknown.png'; - /// ![](http://127.0.0.1:4343/assets/images/coin.png) + /// ![](http://127.0.0.1:3132/assets/images/coin.png) static final String assetsImagesCoin = 'assets/images/coin.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_anim_3.gif) + /// ![](http://127.0.0.1:3132/assets/images/gift_anim_3.gif) static final String assetsImagesGiftAnim3 = 'assets/images/gift_anim_3.gif'; - /// ![](http://127.0.0.1:4343/assets/images/gift_anim_2.gif) + /// ![](http://127.0.0.1:3132/assets/images/gift_anim_2.gif) static final String assetsImagesGiftAnim2 = 'assets/images/gift_anim_2.gif'; - /// ![](http://127.0.0.1:4343/assets/images/gift_1.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_1.png) static final String assetsImagesGift1 = 'assets/images/gift_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/back.png) + /// ![](http://127.0.0.1:3132/assets/images/back.png) static final String assetsImagesBack = 'assets/images/back.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_show_2_2.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_show_2_2.png) static final String assetsImagesGiftShow22 = 'assets/images/gift_show_2_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_3.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_3.png) static final String assetsImagesGift3 = 'assets/images/gift_3.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_quick_scan.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_quick_scan.png) static final String assetsImagesIcQuickScan = 'assets/images/ic_quick_scan.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_icon.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_icon.png) static final String assetsImagesImgTranslationIcon = 'assets/images/img_translation_icon.png'; - /// ![](http://127.0.0.1:4343/assets/images/img_translation_tick.png) + /// ![](http://127.0.0.1:3132/assets/images/img_translation_tick.png) static final String assetsImagesImgTranslationTick = 'assets/images/img_translation_tick.png'; - /// ![](http://127.0.0.1:4343/assets/images/ic_bottle_msg.png) + /// ![](http://127.0.0.1:3132/assets/images/ic_bottle_msg.png) static final String assetsImagesIcBottleMsg = 'assets/images/ic_bottle_msg.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_anim_1.gif) + /// ![](http://127.0.0.1:3132/assets/images/gift_anim_1.gif) static final String assetsImagesGiftAnim1 = 'assets/images/gift_anim_1.gif'; - /// ![](http://127.0.0.1:4343/assets/images/bg.png) + /// ![](http://127.0.0.1:3132/assets/images/bg.png) static final String assetsImagesBg = 'assets/images/bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_2.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_2.png) static final String assetsImagesGift2 = 'assets/images/gift_2.png'; - /// ![](http://127.0.0.1:4343/assets/images/ext_txt.png) + /// ![](http://127.0.0.1:3132/assets/images/ext_txt.png) static final String assetsImagesExtTxt = 'assets/images/ext_txt.png'; - /// ![](http://127.0.0.1:4343/assets/images/gift_show_2_1.png) + /// ![](http://127.0.0.1:3132/assets/images/gift_show_2_1.png) static final String assetsImagesGiftShow21 = 'assets/images/gift_show_2_1.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/emoji.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/emoji.png) static final String assetsImagesChatEmoji = 'assets/images/chat/emoji.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/onion.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/onion.png) static final String assetsImagesChatOnion = 'assets/images/chat/onion.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon1.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon1.png) static final String assetsImagesChatIcon1 = 'assets/images/chat/icon1.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon3.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon3.png) static final String assetsImagesChatIcon3 = 'assets/images/chat/icon3.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon2.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon2.png) static final String assetsImagesChatIcon2 = 'assets/images/chat/icon2.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon6.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon6.png) static final String assetsImagesChatIcon6 = 'assets/images/chat/icon6.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon5.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon5.png) static final String assetsImagesChatIcon5 = 'assets/images/chat/icon5.png'; - /// ![](http://127.0.0.1:4343/assets/images/chat/icon4.png) + /// ![](http://127.0.0.1:3132/assets/images/chat/icon4.png) static final String assetsImagesChatIcon4 = 'assets/images/chat/icon4.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_wx.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_wx.png) static final String assetsImagesLoginVipWx = 'assets/images/login/vip_wx.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_logio.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_logio.png) static final String assetsImagesLoginVipLogio = 'assets/images/login/vip_logio.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/lock.png) + /// ![](http://127.0.0.1:3132/assets/images/login/lock.png) static final String assetsImagesLoginLock = 'assets/images/login/lock.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_rect1.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_rect1.png) static final String assetsImagesLoginVipRect1 = 'assets/images/login/vip_rect1.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_rect3.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_rect3.png) static final String assetsImagesLoginVipRect3 = 'assets/images/login/vip_rect3.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_rect2.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_rect2.png) static final String assetsImagesLoginVipRect2 = 'assets/images/login/vip_rect2.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_zfb.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_zfb.png) static final String assetsImagesLoginVipZfb = 'assets/images/login/vip_zfb.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/dly_icon3.png) + /// ![](http://127.0.0.1:3132/assets/images/login/dly_icon3.png) static final String assetsImagesLoginDlyIcon3 = 'assets/images/login/dly_icon3.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/dly_icon2.png) + /// ![](http://127.0.0.1:3132/assets/images/login/dly_icon2.png) static final String assetsImagesLoginDlyIcon2 = 'assets/images/login/dly_icon2.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/SY_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/login/SY_bg.png) static final String assetsImagesLoginSYBg = 'assets/images/login/SY_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/dly_logo.png) + /// ![](http://127.0.0.1:3132/assets/images/login/dly_logo.png) static final String assetsImagesLoginDlyLogo = 'assets/images/login/dly_logo.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/vip_other.png) + /// ![](http://127.0.0.1:3132/assets/images/login/vip_other.png) static final String assetsImagesLoginVipOther = 'assets/images/login/vip_other.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/dly_icon1.png) + /// ![](http://127.0.0.1:3132/assets/images/login/dly_icon1.png) static final String assetsImagesLoginDlyIcon1 = 'assets/images/login/dly_icon1.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/rzzx.png) + /// ![](http://127.0.0.1:3132/assets/images/login/rzzx.png) static final String assetsImagesLoginRzzx = 'assets/images/login/rzzx.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/dly_icon4.png) + /// ![](http://127.0.0.1:3132/assets/images/login/dly_icon4.png) static final String assetsImagesLoginDlyIcon4 = 'assets/images/login/dly_icon4.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/money.png) + /// ![](http://127.0.0.1:3132/assets/images/login/money.png) static final String assetsImagesLoginMoney = 'assets/images/login/money.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/SY_logo.png) + /// ![](http://127.0.0.1:3132/assets/images/login/SY_logo.png) static final String assetsImagesLoginSYLogo = 'assets/images/login/SY_logo.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/delete.png) + /// ![](http://127.0.0.1:3132/assets/images/login/delete.png) static final String assetsImagesLoginDelete = 'assets/images/login/delete.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/xzxb_male.png) + /// ![](http://127.0.0.1:3132/assets/images/login/xzxb_male.png) static final String assetsImagesLoginXzxbMale = 'assets/images/login/xzxb_male.png'; - /// ![](http://127.0.0.1:4343/assets/images/login/xzxb_female.png) + /// ![](http://127.0.0.1:3132/assets/images/login/xzxb_female.png) static final String assetsImagesLoginXzxbFemale = 'assets/images/login/xzxb_female.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon8.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon8.png) static final String assetsImagesParkQzIcon8 = 'assets/images/park/qz_icon8.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon1.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon1.png) static final String assetsImagesParkQzIcon1 = 'assets/images/park/qz_icon1.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon2.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon2.png) static final String assetsImagesParkQzIcon2 = 'assets/images/park/qz_icon2.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon3.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon3.png) static final String assetsImagesParkQzIcon3 = 'assets/images/park/qz_icon3.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon7.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon7.png) static final String assetsImagesParkQzIcon7 = 'assets/images/park/qz_icon7.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon6.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon6.png) static final String assetsImagesParkQzIcon6 = 'assets/images/park/qz_icon6.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon4.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon4.png) static final String assetsImagesParkQzIcon4 = 'assets/images/park/qz_icon4.png'; - /// ![](http://127.0.0.1:4343/assets/images/park/qz_icon5.png) + /// ![](http://127.0.0.1:3132/assets/images/park/qz_icon5.png) static final String assetsImagesParkQzIcon5 = 'assets/images/park/qz_icon5.png'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_11.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_11.gif) static final String assetsImagesStickerSticker11 = 'assets/images/sticker/sticker_11.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_7.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_7.gif) static final String assetsImagesStickerSticker7 = 'assets/images/sticker/sticker_7.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_6.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_6.gif) static final String assetsImagesStickerSticker6 = 'assets/images/sticker/sticker_6.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_10.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_10.gif) static final String assetsImagesStickerSticker10 = 'assets/images/sticker/sticker_10.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_12.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_12.gif) static final String assetsImagesStickerSticker12 = 'assets/images/sticker/sticker_12.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_4.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_4.gif) static final String assetsImagesStickerSticker4 = 'assets/images/sticker/sticker_4.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_5.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_5.gif) static final String assetsImagesStickerSticker5 = 'assets/images/sticker/sticker_5.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_13.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_13.gif) static final String assetsImagesStickerSticker13 = 'assets/images/sticker/sticker_13.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_17.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_17.gif) static final String assetsImagesStickerSticker17 = 'assets/images/sticker/sticker_17.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_1.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_1.gif) static final String assetsImagesStickerSticker1 = 'assets/images/sticker/sticker_1.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_16.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_16.gif) static final String assetsImagesStickerSticker16 = 'assets/images/sticker/sticker_16.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_14.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_14.gif) static final String assetsImagesStickerSticker14 = 'assets/images/sticker/sticker_14.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_28.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_28.gif) static final String assetsImagesStickerSticker28 = 'assets/images/sticker/sticker_28.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_2.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_2.gif) static final String assetsImagesStickerSticker2 = 'assets/images/sticker/sticker_2.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_3.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_3.gif) static final String assetsImagesStickerSticker3 = 'assets/images/sticker/sticker_3.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_29.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_29.gif) static final String assetsImagesStickerSticker29 = 'assets/images/sticker/sticker_29.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_15.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_15.gif) static final String assetsImagesStickerSticker15 = 'assets/images/sticker/sticker_15.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_18.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_18.gif) static final String assetsImagesStickerSticker18 = 'assets/images/sticker/sticker_18.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_24.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_24.gif) static final String assetsImagesStickerSticker24 = 'assets/images/sticker/sticker_24.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_30.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_30.gif) static final String assetsImagesStickerSticker30 = 'assets/images/sticker/sticker_30.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_25.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_25.gif) static final String assetsImagesStickerSticker25 = 'assets/images/sticker/sticker_25.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_19.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_19.gif) static final String assetsImagesStickerSticker19 = 'assets/images/sticker/sticker_19.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_27.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_27.gif) static final String assetsImagesStickerSticker27 = 'assets/images/sticker/sticker_27.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_26.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_26.gif) static final String assetsImagesStickerSticker26 = 'assets/images/sticker/sticker_26.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_22.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_22.gif) static final String assetsImagesStickerSticker22 = 'assets/images/sticker/sticker_22.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_8.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_8.gif) static final String assetsImagesStickerSticker8 = 'assets/images/sticker/sticker_8.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_9.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_9.gif) static final String assetsImagesStickerSticker9 = 'assets/images/sticker/sticker_9.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_23.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_23.gif) static final String assetsImagesStickerSticker23 = 'assets/images/sticker/sticker_23.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_21.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_21.gif) static final String assetsImagesStickerSticker21 = 'assets/images/sticker/sticker_21.gif'; - /// ![](http://127.0.0.1:4343/assets/images/sticker/sticker_20.gif) + /// ![](http://127.0.0.1:3132/assets/images/sticker/sticker_20.gif) static final String assetsImagesStickerSticker20 = 'assets/images/sticker/sticker_20.gif'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_bg.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_bg.png) static final String assetsImagesVipHyBg = 'assets/images/vip/hy_bg.png'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_tj.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_tj.png) static final String assetsImagesVipHyTj = 'assets/images/vip/hy_tj.png'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_xz.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_xz.png) static final String assetsImagesVipHyXz = 'assets/images/vip/hy_xz.png'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_cjhy.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_cjhy.png) static final String assetsImagesVipHyCjhy = 'assets/images/vip/hy_cjhy.png'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_hy.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_hy.png) static final String assetsImagesVipHyHy = 'assets/images/vip/hy_hy.png'; - /// ![](http://127.0.0.1:4343/assets/images/vip/hy_tq.png) + /// ![](http://127.0.0.1:3132/assets/images/vip/hy_tq.png) static final String assetsImagesVipHyTq = 'assets/images/vip/hy_tq.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/88.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/88.png) static final String assetsImagesEmojiface88 = 'assets/images/emojiface/88.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/77.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/77.png) static final String assetsImagesEmojiface77 = 'assets/images/emojiface/77.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/63.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/63.png) static final String assetsImagesEmojiface63 = 'assets/images/emojiface/63.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/62.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/62.png) static final String assetsImagesEmojiface62 = 'assets/images/emojiface/62.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/76.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/76.png) static final String assetsImagesEmojiface76 = 'assets/images/emojiface/76.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/89.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/89.png) static final String assetsImagesEmojiface89 = 'assets/images/emojiface/89.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/60.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/60.png) static final String assetsImagesEmojiface60 = 'assets/images/emojiface/60.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/74.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/74.png) static final String assetsImagesEmojiface74 = 'assets/images/emojiface/74.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/48.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/48.png) static final String assetsImagesEmojiface48 = 'assets/images/emojiface/48.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/49.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/49.png) static final String assetsImagesEmojiface49 = 'assets/images/emojiface/49.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/75.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/75.png) static final String assetsImagesEmojiface75 = 'assets/images/emojiface/75.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/61.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/61.png) static final String assetsImagesEmojiface61 = 'assets/images/emojiface/61.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/59.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/59.png) static final String assetsImagesEmojiface59 = 'assets/images/emojiface/59.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/65.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/65.png) static final String assetsImagesEmojiface65 = 'assets/images/emojiface/65.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/71.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/71.png) static final String assetsImagesEmojiface71 = 'assets/images/emojiface/71.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/70.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/70.png) static final String assetsImagesEmojiface70 = 'assets/images/emojiface/70.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/64.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/64.png) static final String assetsImagesEmojiface64 = 'assets/images/emojiface/64.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/58.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/58.png) static final String assetsImagesEmojiface58 = 'assets/images/emojiface/58.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/8.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/8.png) static final String assetsImagesEmojiface8 = 'assets/images/emojiface/8.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/72.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/72.png) static final String assetsImagesEmojiface72 = 'assets/images/emojiface/72.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/66.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/66.png) static final String assetsImagesEmojiface66 = 'assets/images/emojiface/66.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/67.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/67.png) static final String assetsImagesEmojiface67 = 'assets/images/emojiface/67.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/73.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/73.png) static final String assetsImagesEmojiface73 = 'assets/images/emojiface/73.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/9.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/9.png) static final String assetsImagesEmojiface9 = 'assets/images/emojiface/9.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/14.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/14.png) static final String assetsImagesEmojiface14 = 'assets/images/emojiface/14.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/28.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/28.png) static final String assetsImagesEmojiface28 = 'assets/images/emojiface/28.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/29.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/29.png) static final String assetsImagesEmojiface29 = 'assets/images/emojiface/29.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/15.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/15.png) static final String assetsImagesEmojiface15 = 'assets/images/emojiface/15.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/17.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/17.png) static final String assetsImagesEmojiface17 = 'assets/images/emojiface/17.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/16.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/16.png) static final String assetsImagesEmojiface16 = 'assets/images/emojiface/16.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/12.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/12.png) static final String assetsImagesEmojiface12 = 'assets/images/emojiface/12.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/13.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/13.png) static final String assetsImagesEmojiface13 = 'assets/images/emojiface/13.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/39.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/39.png) static final String assetsImagesEmojiface39 = 'assets/images/emojiface/39.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/11.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/11.png) static final String assetsImagesEmojiface11 = 'assets/images/emojiface/11.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/10.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/10.png) static final String assetsImagesEmojiface10 = 'assets/images/emojiface/10.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/38.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/38.png) static final String assetsImagesEmojiface38 = 'assets/images/emojiface/38.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/35.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/35.png) static final String assetsImagesEmojiface35 = 'assets/images/emojiface/35.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/21.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/21.png) static final String assetsImagesEmojiface21 = 'assets/images/emojiface/21.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/20.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/20.png) static final String assetsImagesEmojiface20 = 'assets/images/emojiface/20.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/34.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/34.png) static final String assetsImagesEmojiface34 = 'assets/images/emojiface/34.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/22.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/22.png) static final String assetsImagesEmojiface22 = 'assets/images/emojiface/22.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/36.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/36.png) static final String assetsImagesEmojiface36 = 'assets/images/emojiface/36.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/37.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/37.png) static final String assetsImagesEmojiface37 = 'assets/images/emojiface/37.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/23.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/23.png) static final String assetsImagesEmojiface23 = 'assets/images/emojiface/23.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/27.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/27.png) static final String assetsImagesEmojiface27 = 'assets/images/emojiface/27.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/33.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/33.png) static final String assetsImagesEmojiface33 = 'assets/images/emojiface/33.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/32.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/32.png) static final String assetsImagesEmojiface32 = 'assets/images/emojiface/32.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/26.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/26.png) static final String assetsImagesEmojiface26 = 'assets/images/emojiface/26.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/18.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/18.png) static final String assetsImagesEmojiface18 = 'assets/images/emojiface/18.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/30.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/30.png) static final String assetsImagesEmojiface30 = 'assets/images/emojiface/30.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/24.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/24.png) static final String assetsImagesEmojiface24 = 'assets/images/emojiface/24.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/25.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/25.png) static final String assetsImagesEmojiface25 = 'assets/images/emojiface/25.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/31.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/31.png) static final String assetsImagesEmojiface31 = 'assets/images/emojiface/31.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/19.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/19.png) static final String assetsImagesEmojiface19 = 'assets/images/emojiface/19.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/81.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/81.png) static final String assetsImagesEmojiface81 = 'assets/images/emojiface/81.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/4.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/4.png) static final String assetsImagesEmojiface4 = 'assets/images/emojiface/4.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/56.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/56.png) static final String assetsImagesEmojiface56 = 'assets/images/emojiface/56.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/42.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/42.png) static final String assetsImagesEmojiface42 = 'assets/images/emojiface/42.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/43.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/43.png) static final String assetsImagesEmojiface43 = 'assets/images/emojiface/43.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/5.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/5.png) static final String assetsImagesEmojiface5 = 'assets/images/emojiface/5.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/57.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/57.png) static final String assetsImagesEmojiface57 = 'assets/images/emojiface/57.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/80.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/80.png) static final String assetsImagesEmojiface80 = 'assets/images/emojiface/80.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/82.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/82.png) static final String assetsImagesEmojiface82 = 'assets/images/emojiface/82.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/41.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/41.png) static final String assetsImagesEmojiface41 = 'assets/images/emojiface/41.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/55.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/55.png) static final String assetsImagesEmojiface55 = 'assets/images/emojiface/55.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/7.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/7.png) static final String assetsImagesEmojiface7 = 'assets/images/emojiface/7.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/69.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/69.png) static final String assetsImagesEmojiface69 = 'assets/images/emojiface/69.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/68.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/68.png) static final String assetsImagesEmojiface68 = 'assets/images/emojiface/68.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/54.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/54.png) static final String assetsImagesEmojiface54 = 'assets/images/emojiface/54.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/6.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/6.png) static final String assetsImagesEmojiface6 = 'assets/images/emojiface/6.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/40.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/40.png) static final String assetsImagesEmojiface40 = 'assets/images/emojiface/40.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/83.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/83.png) static final String assetsImagesEmojiface83 = 'assets/images/emojiface/83.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/87.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/87.png) static final String assetsImagesEmojiface87 = 'assets/images/emojiface/87.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/78.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/78.png) static final String assetsImagesEmojiface78 = 'assets/images/emojiface/78.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/44.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/44.png) static final String assetsImagesEmojiface44 = 'assets/images/emojiface/44.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/2.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/2.png) static final String assetsImagesEmojiface2 = 'assets/images/emojiface/2.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/50.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/50.png) static final String assetsImagesEmojiface50 = 'assets/images/emojiface/50.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/3.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/3.png) static final String assetsImagesEmojiface3 = 'assets/images/emojiface/3.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/51.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/51.png) static final String assetsImagesEmojiface51 = 'assets/images/emojiface/51.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/45.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/45.png) static final String assetsImagesEmojiface45 = 'assets/images/emojiface/45.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/79.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/79.png) static final String assetsImagesEmojiface79 = 'assets/images/emojiface/79.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/86.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/86.png) static final String assetsImagesEmojiface86 = 'assets/images/emojiface/86.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/90.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/90.png) static final String assetsImagesEmojiface90 = 'assets/images/emojiface/90.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/84.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/84.png) static final String assetsImagesEmojiface84 = 'assets/images/emojiface/84.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/53.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/53.png) static final String assetsImagesEmojiface53 = 'assets/images/emojiface/53.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/1.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/1.png) static final String assetsImagesEmojiface1 = 'assets/images/emojiface/1.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/47.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/47.png) static final String assetsImagesEmojiface47 = 'assets/images/emojiface/47.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/46.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/46.png) static final String assetsImagesEmojiface46 = 'assets/images/emojiface/46.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/52.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/52.png) static final String assetsImagesEmojiface52 = 'assets/images/emojiface/52.png'; - /// ![](http://127.0.0.1:4343/assets/images/emojiface/85.png) + /// ![](http://127.0.0.1:3132/assets/images/emojiface/85.png) static final String assetsImagesEmojiface85 = 'assets/images/emojiface/85.png'; } diff --git a/lib/utils/CustomUI.dart b/lib/utils/CustomUI.dart index 40ef4cc..7924b89 100644 --- a/lib/utils/CustomUI.dart +++ b/lib/utils/CustomUI.dart @@ -8,6 +8,7 @@ import 'package:chat/generated/i18n.dart'; import 'package:chat/home/VerificationCenter.dart'; import 'package:chat/home/VipPage.dart'; import 'package:chat/home/realtimehelper/translation_evaluation_dialog.dart'; +import 'package:chat/home/realtimehelper/translation_order_push_dialog.dart'; import 'package:chat/models/group_info_model.dart'; import 'package:chat/photo/ui/dialog/not_permission_dialog.dart'; import 'package:chat/utils/LoadingDialog.dart'; @@ -1266,144 +1267,11 @@ class CustomUI { ///** isUser 是否是用户,或为 翻译 static void buildTranslationHelperOrderDialog( BuildContext context, bool isUser, - {String orderId, int scenes = 0, String desc}) { - var scenesList = [ - I18n.of(context).translation_scenes_1, - I18n.of(context).translation_scenes_2, - I18n.of(context).translation_scenes_3, - I18n.of(context).translation_scenes_4, - ]; + {String orderId, int scenes = 0, String desc,Function userStartChat,int createTime}) { - Navigator.of(context).push(TutorialOverlay( - child: InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: UnconstrainedBox( - alignment: Alignment.topCenter, - child: InkWell( - onTap: () {}, - child: Container( - alignment: Alignment.topCenter, - -// height: 180, - width: Screen.width - 20, - margin: EdgeInsets.all(10), - child: Card( - elevation: 2, // 阴影 - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), -// side: BorderSide(color: Colors.green,width: 25), - ), - child: Container( -// color: Colors.yellow, - width: double.maxFinite, - padding: EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 15), - child: Text( - I18n.of(context).translation_butler_dialog_title, - textScaleFactor: 1.0, - textAlign: TextAlign.left, - style: TextStyle( - fontWeight: FontWeight.w500, - color: AppColors.NewAppbarTextColor, - fontSize: 17), - ), - ), - Text( - I18n.of(context) - .translation_butler_dialog_order - .replaceAll( - '/s1', isUser ? I18n.of(context).you : 'xxx'), - textScaleFactor: 1.0, - textAlign: TextAlign.left, - style: TextStyle( - color: AppColors.NewAppbarTextColor, fontSize: 14), - ), - SizedBox( - height: 10, - ), - Text( - '时间:今天11:45 时长:5分钟', - textScaleFactor: 1.0, - textAlign: TextAlign.left, - style: - TextStyle(color: Color(0xFF797979), fontSize: 11), - ), - - isUser - ? Container() - : Text( - '场景:${scenesList[scenes]}', - textScaleFactor: 1.0, - textAlign: TextAlign.left, - style: TextStyle( - color: Color(0xFF797979), fontSize: 11), - ), - isUser - ? Container() - : Text( - '更多描述:$desc}', - textScaleFactor: 1.0, - textAlign: TextAlign.left, - style: TextStyle( - color: Color(0xFF797979), fontSize: 11), - ), -// - Container( - margin: EdgeInsets.only( - left: 30, right: 30, top: 20, bottom: 10), - child: isUser - ? Container( - margin: EdgeInsets.only(top: 10), - height: 36, - alignment: Alignment.center, - child: RaisedButton( - color: Color(0xff3875E9), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(10))), - child: Padding( - padding: - EdgeInsets.only(left: 10, right: 10), - child: Text( - I18n.of(context) - .translation_butler_dialog_start_chat, - textScaleFactor: 1.0, - style: TextStyle( - color: Colors.white, - fontSize: 15, - fontWeight: FontWeight.w500), - ), - ), - onPressed: () { - Navigator.of(context)..pop(); - }), - ) - : CountDownButton( - I18n.of(context) - .translation_butler_dialog_start_service, - () { - - Navigator.of(context).pop(); - },onPress: (){ - MsgHandler.sendReceiveOrder(); - Navigator.of(context).pop(); - },), - ) - ], - ), - ), - ), - ), - ), - ), - ), + Navigator.of(context).push(TutorialOverlay( + child: TranslateOrderPushPage(isUser,orderId: orderId,scenes: scenes,desc: desc,userStartChat: userStartChat,createTime: createTime,), )); } diff --git a/lib/utils/HttpUtil.dart b/lib/utils/HttpUtil.dart index 86d44dd..1a322ab 100644 --- a/lib/utils/HttpUtil.dart +++ b/lib/utils/HttpUtil.dart @@ -836,9 +836,10 @@ class HttpUtil { UserData().stationOpenSwitch = config['station'] == 1; UserData().myProgramOpenSwitch = config['myProgram'] == 1; UserData().nearbyOpenSwitch = config['nearby'] == 1; + UserData().isTranslateUser = config['isTranslateUser'] == 1; // print('### config: start'); -// print('### config: iapPay:${config['iapPay']}'); + print('### config: isTranslateUser:${config['isTranslateUser']}'); } } } @@ -1417,4 +1418,74 @@ class HttpUtil { FriendListMgr().checkFromServer(resData['data']); } } + + ///实时帮-翻译管家评价 + evaluationTransalteHK(String orderNo,String value,bool isGood,Function callback) async { + Map data = { + "userId": UserData().basicInfo.userId, + "orderNo": orderNo, + "gradeStatus":isGood?1:2 + }; + data['sign'] = TokenMgr().getSign(data); + data['value'] = value; + Response res = await HttpUtil().post('steward/evaluation', data: data); + callback(); + if (res == null) { + print('请求异常'); + return; + } + var resData = res.data; + if (resData['code'] == 0) { + showToast('评价成功'); + }else{ + showToast(I18n.of(Constants.getCurrentContext()).net_error); + } + } + + + ///实时帮-用户测距 + userRanging(int distance,String origin,String ending) async { + Map data = { + "userId": UserData().basicInfo.userId, + "distance": distance, + }; + data['sign'] = TokenMgr().getSign(data); + data['origin'] = origin; + data['ending'] = ending; + Response res = await HttpUtil().post('steward/userRanging', data: data); + + if (res == null) { + print('请求异常'); + return; + } + var resData = res.data; + if (resData['code'] == 0) { + print('实时帮-用户测距提交 成功'); + }else{ + print('实时帮-用户测距提交 失败'); + } + } + + + ///实时帮-翻译人员上线、下线 + translateHKloginRecord(bool isLogin,Function callback) async { + Map data = { + "userId": UserData().basicInfo.userId, + "type": isLogin?1:2, + }; + data['sign'] = TokenMgr().getSign(data); + Response res = await HttpUtil().post('steward/loginRecord', data: data); + + if (res == null) { + print('请求异常'); + return; + } + var resData = res.data; + if (resData['code'] == 0) { + callback(); + print('翻译人员上线、下线 成功'); + }else{ + print('翻译人员上线、下线 失败 ${resData['msg']}'); + } + } } diff --git a/lib/utils/MessageMgr.dart b/lib/utils/MessageMgr.dart index 7860774..f8dacd0 100644 --- a/lib/utils/MessageMgr.dart +++ b/lib/utils/MessageMgr.dart @@ -8,7 +8,9 @@ class MessageMgr { static const String TRANSLATE_HK_REFRESH_ORDER ='translate_hk_refresh_order'; static const String TRANSLATE_HK_RECEIVE_ORDER ='translate_hk_receive_order'; + static const String TRANSLATE_HK_CANCEL_ORDER ='translate_hk_cancel_order'; static const String TRANSLATE_HK_START_CHAT ='translate_hk_start_chat'; + static const String TRANSLATE_HK_END_CHAT ='translate_hk_end_chat'; //私有构造函数 diff --git a/lib/utils/msgHandler.dart b/lib/utils/msgHandler.dart index 3d74190..6cd11ba 100644 --- a/lib/utils/msgHandler.dart +++ b/lib/utils/msgHandler.dart @@ -416,43 +416,46 @@ class MsgHandler { } else if(isTranslateHK){ //TODO ddddd var myId = UserData().basicInfo.userId; + print('chat.contentBuff:${chat.contentBuff.length}'); TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff); BaseUserInfo friendId ; + print('chat.contentBuff AAAA'); + TranslateHKMgr().isUser = myId== notice.employer.id; ///判断自己是翻译官还是用户 - if(notice.operateduId[0].id==myId){ - friendId =notice.operateduId[1]; + print('chat.contentBuff BBBB'); + if(myId== notice.employer.id){ + friendId =notice.inter; }else{ - friendId = notice.operateduId[0]; + friendId = notice.employer; } - print('notice.operateduId length ${notice.operateduId.length}'); - print('friend id: ${friendId.id} '); + print('friend id: ${friendId.id} '); int sessionId = chat.targetId; if (chat.cType == ChatType.GroupChatNoticeType) { - print('是群公告哦'); + msgModel = MsgModel(0, friendId.id, chat.cType.value, chat.contentBuff, chat.sendTime.toInt(), sessionId, channelType: ChatChannelType.Session.value); } - ///接到开始翻译管家消息-打开翻译管家页面 + ///接到开始翻译管家消息-打开翻译管家聊天页面 if(notice.noticeType==TransHKChatNoticeType.StartChat){ - if(TranslateHKMgr().isUser){ - //TRANSLATE_HK_RECEIVE_ORDER 发送开始聊天弹窗 - }else{ - Future.delayed(Duration(seconds: 3),(){ - curActiveSession = sessionId; - print('curActiveSession:$curActiveSession'); - MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); - }); - } - + Future.delayed(Duration(seconds: 1),(){ + TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; + MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER ); + curActiveSession = sessionId; + print('curActiveSession:$curActiveSession'); + MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); + }); + }else if(notice.noticeType==TransHKChatNoticeType.EndChat){ + print('chat.contentBuff cccc'); + MessageMgr().emit(MessageMgr.TRANSLATE_HK_END_CHAT, friendId.id); } }else{//私聊通知消息 @@ -884,8 +887,9 @@ class MsgHandler { } } } else if (msgId == 3) { + print('收到聊天消息'); var msgContent = PushChat.fromBuffer(content); -// print('收到聊天消息'); + print('收到聊天消息BBBBB'); ackServerMsg(msgContent.sendTime); handlerReceiveMsg(msgContent); } else if (msgId == 4) { @@ -981,6 +985,10 @@ class MsgHandler { handlerCancelTranslateOrder(content); }else if(msgId==20){ handlerDeliveryInterpreterOrderPush(content); + }else if(msgId==21){ + handlerCancellationTransHKOrderPush(content); + }else if(msgId==8){ + handlerEndTransHKOrderRes(content); } break; @@ -1275,13 +1283,12 @@ class MsgHandler { //发布翻译管家帮助订单 static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { - + TranslateHKMgr().isUser=true; debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); var seq = IssueTransHKOrderReq.create(); seq.tLanguage = fromLanguage|toLanguage; seq.scenes =scences; seq.desc = extraDesc; - TranslateHKMgr().isUser=true; NetWork().sendMsg(ComId.TranslateOrder, 1, seq); } @@ -1338,10 +1345,23 @@ class MsgHandler { order.tLanguage=res.tLanguage.toInt(); order.scenes=res.scenes.toInt(); TranslateHKMgr().order = order; - MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, res); + MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order); } +//派送订单已被取消 + static handlerCancellationTransHKOrderPush(List msgContent) { + + var res = CancellationTransHKOrderPush.fromBuffer(msgContent); + debugPrint('派送订单已被取消: orderId${res.orderId}'); +// print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); + + TranslateHKMgr().order = null; + MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER); + showToast('派送订单已被取消'); + } + + //接收订单请求 static sendReceiveOrder( ) { @@ -1365,12 +1385,37 @@ class MsgHandler { debugPrint('接收订单消息回应失败${res.errorCode}'); } } - ///翻译官价聊天开始推送 - static handlerTranslateStart(List msgContent) { - debugPrint('翻译官价聊天开始推送'); -// var res = TransHKChatStartPush.fromBuffer(msgContent); + + + + + //用户主动结束翻译管家服务 + static sendEndTransHKOrderReq() { + + debugPrint('用户主动结束翻译管家服务 ${TranslateHKMgr().orderId}' ); + var seq = EndTransHKOrderReq.create(); + seq.orderId = TranslateHKMgr().orderId; + NetWork().sendMsg(ComId.TranslateOrder, 7, seq); + } + + //用户主动结束翻译管家服务回应 + static handlerEndTransHKOrderRes(List msgContent) { + debugPrint('用户主动结束翻译管家服务'); + var res = EndTransHKOrderRes.fromBuffer(msgContent); + if (res.errorCode == 0) { + +// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); + debugPrint('用户主动结束翻译管家服务 成功: '); + } else { + debugPrint('用户主动结束翻译管家服务 失败${res.errorCode}'); + } } + + + + + //消息免打扰请求结果 static handlerGroupIsShowMenberNiceName(List msgContent) { print('设置是否显示群昵称'); diff --git a/pubspec.yaml b/pubspec.yaml index a0f7a8b..60ffcca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -201,9 +201,11 @@ flutter: assets: # assets-generator-begin # assets/images/* + - assets/images/img_realtime_bg2.png - assets/images/bofang.png - assets/images/ic_quick_search.png - assets/images/img_temp_share.png + - assets/images/img_realtime_bg1.png - assets/images/ic_tag.png - assets/images/default_nor_avatar.png - assets/images/server_icon.png @@ -211,6 +213,7 @@ flutter: - assets/images/ic_feeds.png - assets/images/daily_bg_1.png - assets/images/img_translation_no.png + - assets/images/img_check_photo_bg.png - assets/images/yqm_bg.png - assets/images/daily_bg_2.png - assets/images/ext_excel.png From ae979cd0f54758af026796ee4cf4a62cf460203e Mon Sep 17 00:00:00 2001 From: jiahao <283739569@qq.com> Date: Tue, 31 Mar 2020 15:56:18 +0800 Subject: [PATCH 2/4] 1 --- lib/chat/ChatPage.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/chat/ChatPage.dart b/lib/chat/ChatPage.dart index 9c271d7..50aa02d 100644 --- a/lib/chat/ChatPage.dart +++ b/lib/chat/ChatPage.dart @@ -40,6 +40,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:oktoast/oktoast.dart'; import 'package:provider/provider.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import '../r.dart'; import 'ChatPageItem.dart'; import 'input_bar.dart'; From 1156781e002b9e7a29d7bd01bdfbcfd77b8e64c7 Mon Sep 17 00:00:00 2001 From: jiahao <283739569@qq.com> Date: Tue, 31 Mar 2020 18:46:50 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E7=AE=A1=E5=AE=B6/?= =?UTF-8?q?=E5=8D=8E=E4=B8=BAapp=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/agconnect-services.json | 15 +- android/app/build.gradle | 2 +- i18n/en-US.json | 16 +- i18n/ja-JP.json | 15 +- i18n/ko-KR.json | 16 +- i18n/vi-VN.json | 15 +- i18n/zh-CN.json | 16 +- i18n/zh-HK.json | 15 +- ios/Podfile.lock | 6 + lib/chat/ChatPage.dart | 194 ++++++++------- lib/chat/ChatPageItem.dart | 47 ++-- lib/data/translate_hk_data_mgr.dart | 2 + lib/generated/i18n.dart | 224 +++++++++++++++++- lib/home/homeMain.dart | 2 +- .../realtimehelper/real_time_helper_page.dart | 62 ++++- .../translation_butler_page.dart | 12 +- .../translation_order_push_dialog.dart | 30 ++- .../realtimehelper/travel_butler_page.dart | 4 +- lib/models/last_msg_description.dart | 7 +- lib/proto/transhousekeeper.pb.dart | 52 ++-- lib/proto/transhousekeeper.pbjson.dart | 9 +- lib/proto/transhousekeeper.proto | 9 +- lib/utils/CustomUI.dart | 4 +- lib/utils/HttpUtil.dart | 5 + lib/utils/msgHandler.dart | 3 +- 25 files changed, 593 insertions(+), 189 deletions(-) diff --git a/android/app/agconnect-services.json b/android/app/agconnect-services.json index abbd909..2e60b4b 100644 --- a/android/app/agconnect-services.json +++ b/android/app/agconnect-services.json @@ -5,11 +5,12 @@ }, "client":{ "cp_id":"890086000300385560", - "product_id":"9105385871708389411", - "client_id":"270664671340528640", - "client_secret":"00CC308FC014C334D58CF79471B490FD6274BC39FEAAD89B63E762871DB4EBCC", - "app_id":"101598177", - "package_name":"com.cyhd.henhoandroid" + "product_id":"9105385871708615262", + "client_id":"330243365088003136", + "client_secret":"7A8C08A4377B06C3FE950D55511A0F7CBA4164C9319E06E8401A33BBCBDCFA7C", + "app_id":"101961905", + "package_name":"com.cyhd.henhoandroid", + "api_key":"CV6qgj5CPtQonVHTR8gGJxvdRrkeBaZ+KqTsHcRmUyTtSgpYuBknlD5Z8mb3ob8TH7Kq2FJknGNbmserIjlUfmiuUZ2D" }, "service":{ "analytics":{ @@ -18,9 +19,9 @@ "channel_id":"" }, "ml":{ - "mlservice_url":"ml-api-dra.ai.hicloud.com,ml-api-dra.ai.dbankcloud.cn" + "mlservice_url":"ml-api-dra.ai.dbankcloud.com,ml-api-dra.ai.dbankcloud.cn" } }, "region":"SG", "configuration_version":"1.0" -} \ No newline at end of file +} diff --git a/android/app/build.gradle b/android/app/build.gradle index 34a5f99..77fbfd9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -70,7 +70,7 @@ android { XIAOMI_APPKEY:"MI-5221829498125",//小米平台注册的appkey XIAOMI_APPID:"MI-2882303761518294125",//小米平台注册的appid // - HUAWEI_APPID:"101598177",//华为平台注册的appid + HUAWEI_APPID:"101961905",//华为平台注册的appid OPPO_APPKEY : "OP-cd9ece5049514019842f54d537068018", // OPPO平台注册的appkey diff --git a/i18n/en-US.json b/i18n/en-US.json index 03bdd9f..4776afe 100644 --- a/i18n/en-US.json +++ b/i18n/en-US.json @@ -1226,5 +1226,19 @@ "forward":"Forward", "copy_download_url":"复制下载地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有图片违规" + "hava_error_photo":"有图片违规", + "translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/i18n/ja-JP.json b/i18n/ja-JP.json index 52a1d63..d66be64 100644 --- a/i18n/ja-JP.json +++ b/i18n/ja-JP.json @@ -1226,5 +1226,18 @@ "forward":"转发", "copy_download_url":"复制下载地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有图片违规" + "hava_error_photo":"有图片违规", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/i18n/ko-KR.json b/i18n/ko-KR.json index b70f2d8..dcc2d8e 100644 --- a/i18n/ko-KR.json +++ b/i18n/ko-KR.json @@ -1226,5 +1226,19 @@ "forward":"转发", "copy_download_url":"复制下载地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有图片违规" + "hava_error_photo":"有图片违规", + "translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/i18n/vi-VN.json b/i18n/vi-VN.json index 3937c86..b514a25 100644 --- a/i18n/vi-VN.json +++ b/i18n/vi-VN.json @@ -1226,5 +1226,18 @@ "forward": "转发", "copy_download_url": "复制下载地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有图片违规" + "hava_error_photo":"有图片违规", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/i18n/zh-CN.json b/i18n/zh-CN.json index e10f93a..0308d09 100644 --- a/i18n/zh-CN.json +++ b/i18n/zh-CN.json @@ -1226,5 +1226,19 @@ "forward":"转发", "copy_download_url":"复制下载地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有图片违规" + "hava_error_photo":"有图片违规", + "translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/i18n/zh-HK.json b/i18n/zh-HK.json index 86d8c83..775fc22 100644 --- a/i18n/zh-HK.json +++ b/i18n/zh-HK.json @@ -1226,5 +1226,18 @@ "forward":"转发", "copy_download_url":"複製下載地址", "total_friends_nus":"共/s1位朋友", - "hava_error_photo":"有圖片違規" + "hava_error_photo":"有圖片違規", + "translation_butler_push_order_time": "时间:今天/s1 时长:", + "translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:", + "translation_butler_title3": "大神专属", + "translation_butler_start_receive_order": "开启接单", + "translation_butler_stop_receive_order": "未开启接单", + "translation_butler_stop_tips": "翻译人员无法进入创建订单", + "translation_butler_scenes2": "场景:", + "translation_butler_last_item_start": "[翻译管家服务开始]", + "translation_butler_last_item_end": "[翻译管家服务结束]", + "travel_start": "起点", + "travel_end": "终点", + "translation_butler_order_time_out": "翻译订单超时已被取消" + } \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 37831be..ca53417 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -30,6 +30,8 @@ PODS: - connectivity (0.0.1): - Flutter - Reachability + - device_info (0.0.1): + - Flutter - easy_contact_picker (0.0.1): - Flutter - FBSDKCoreKit (5.13.1): @@ -167,6 +169,7 @@ DEPENDENCIES: - auto_orientation (from `.symlinks/plugins/auto_orientation/ios`) - city_pickers (from `.symlinks/plugins/city_pickers/ios`) - connectivity (from `.symlinks/plugins/connectivity/ios`) + - device_info (from `.symlinks/plugins/device_info/ios`) - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) @@ -249,6 +252,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/city_pickers/ios" connectivity: :path: ".symlinks/plugins/connectivity/ios" + device_info: + :path: ".symlinks/plugins/device_info/ios" easy_contact_picker: :path: ".symlinks/plugins/easy_contact_picker/ios" file_picker: @@ -351,6 +356,7 @@ SPEC CHECKSUMS: Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35 connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 + device_info: cbf09d2ec12aa7110e0b09fabe54b5bd6c8efe74 easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730 FBSDKCoreKit: 8fb98209109fb684937f05d534305edb18c20207 FBSDKLoginKit: c7c6ffd9ca9ea45aee32361840af040ad8f6706a diff --git a/lib/chat/ChatPage.dart b/lib/chat/ChatPage.dart index 50aa02d..2cdf809 100644 --- a/lib/chat/ChatPage.dart +++ b/lib/chat/ChatPage.dart @@ -373,98 +373,110 @@ class _ChatPageState extends State { ]; }))); - return Stack( - children: [ - MultiProvider( - providers: [ - ChangeNotifierProvider(create: (_) => _keyboardIndexProvider), - Provider.value(value: false), - Provider.value(value: widget.friendId), - ], - child: GestureDetector( - onTap: hideKeyBoard, - child: ExtendedTextSelectionPointerHandler( - ///选择文字,消除弹窗 - - builder: (states) { - return Listener( - child: Scaffold( - resizeToAvoidBottomInset: false, - backgroundColor: const Color(0xFFE2E9F1), - appBar: AppBar( - title: Text( - '${Provider.of(context).getRefName(friendInfo.userId, friendInfo.nickName)}', - textScaleFactor: 1.0, - style: TextStyle( - color: Constants.BlackTextColor, - fontSize: 16.47), - ), - leading: CustomUI.buildCustomLeading(context,onTap:(){ - if(isTranslateButler && !isTranslateButlerFinish){ - if(UserData().isTranslateUser){ - showToast('翻译服务未结束不能主动结束'); - }else{ - CustomUI.buildTowConfirm( - context, - '是否提前结束翻译管家服务?', - I18n.of(context).confirm, - (){ - setState(() { - isTranslateButlerFinish=true; - - }); - - MsgHandler.sendEndTransHKOrderReq(); - Navigator.of(context).pop(); - }, - '取消', - (){ Navigator.of(context).pop();}); - } - }else{ - Navigator.of(context).pop(); - } - - }), //todo - titleSpacing: -10, - centerTitle: false, - elevation: 1, - actions: actions), - body: SafeArea( - child: Column( - children: [ - NetStateWidget(), - (isTranslateButler&!isTranslateButlerFinish) - ? _buildTranslationButler() - : Container(), - Expanded(child: _buildMessageList()), - InputBar(sendMsg: sendMsg,isTranslateHK: isTranslateButler,), - ], - ))), - behavior: HitTestBehavior.translucent, - onPointerDown: (value) { - for (var state in states) { - if (!state.containsPosition(value.position)) { - //clear other selection - state.clearSelection(); - } - } - }, - onPointerMove: (value) { - //clear other selection - for (var state in states) { - if (!state.containsPosition(value.position)) { + + + return WillPopScope( + child: Stack( + children: [ + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => _keyboardIndexProvider), + Provider.value(value: false), + Provider.value(value: widget.friendId), + ], + child: GestureDetector( + onTap: hideKeyBoard, + child: ExtendedTextSelectionPointerHandler( + ///选择文字,消除弹窗 + + builder: (states) { + return Listener( + child: Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFE2E9F1), + appBar: AppBar( + title: Text( + '${Provider.of(context).getRefName(friendInfo.userId, friendInfo.nickName)}', + textScaleFactor: 1.0, + style: TextStyle( + color: Constants.BlackTextColor, + fontSize: 16.47), + ), + leading: CustomUI.buildCustomLeading(context,onTap:(){ + goBackCheck(); + + }), + titleSpacing: -10, + centerTitle: false, + elevation: 1, + actions: actions), + body: SafeArea( + child: Column( + children: [ + NetStateWidget(), + (isTranslateButler&!isTranslateButlerFinish) + ? _buildTranslationButler() + : Container(), + Expanded(child: _buildMessageList()), + InputBar(sendMsg: sendMsg,isTranslateHK: isTranslateButler,), + ], + ))), + behavior: HitTestBehavior.translucent, + onPointerDown: (value) { + for (var state in states) { + if (!state.containsPosition(value.position)) { + //clear other selection + state.clearSelection(); + } + } + }, + onPointerMove: (value) { //clear other selection - state.clearSelection(); - } - } + for (var state in states) { + if (!state.containsPosition(value.position)) { + //clear other selection + state.clearSelection(); + } + } + }, + ); }, - ); - }, - ))), - isTranslateButler ? getAudioChatView() : Container(), - isTranslateButler ? zoomAudioButton() : Container() - ], - ); + ))), + isTranslateButler ? getAudioChatView() : Container(), + isTranslateButler ? zoomAudioButton() : Container() + ], + ), + onWillPop: () { + goBackCheck(); + return Future.value(true); + }); + } + + + goBackCheck(){ + if(isTranslateButler && !isTranslateButlerFinish){ + if(UserData().isTranslateUser){ + showToast('翻译服务未结束不能主动结束'); + }else{ + CustomUI.buildTowConfirm( + context, + '是否提前结束翻译管家服务?', + I18n.of(context).confirm, + (){ + setState(() { + isTranslateButlerFinish=true; + + }); + + MsgHandler.sendEndTransHKOrderReq(); + Navigator.of(context).pop(); + }, + '取消', + (){ Navigator.of(context).pop();}); + } + }else{ + Navigator.of(context).pop(); + } } Widget getAudioChatView() { @@ -510,7 +522,7 @@ class _ChatPageState extends State { bool isShowZoomButton = true; GlobalKey mykey = GlobalKey(); - double dx = Screen.width , dy = Screen.height/2; + double dx = 0 , dy = 0; double zoomButtonSize = 60; void dragEvent(DragUpdateDetails details) { diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart index 83e6688..509db9c 100644 --- a/lib/chat/ChatPageItem.dart +++ b/lib/chat/ChatPageItem.dart @@ -1543,6 +1543,9 @@ class _ChatPageItemState extends State Widget _buildServiceCard(bool isStart, Function callBack) { + + + String endStr = UserData().isTranslateUser?I18n.of(context).translation_butler_evaluation_tips2:I18n.of(context).translation_butler_evaluation_tips; return Container( alignment: Alignment.center, @@ -1558,28 +1561,28 @@ class _ChatPageItemState extends State padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), child: Row( children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - isStart - ? I18n.of(context).translation_butler_start_service - : I18n.of(context).translation_butler_service_end, - textScaleFactor: 1.0, - style: TextStyle( - color: AppColors.NewAppbarTextColor, fontSize: 15), - ), - Text( - isStart - ? I18n.of(context).translation_butler_start_tips - : I18n.of(context).translation_butler_evaluation_tips, - textScaleFactor: 1.0, - style: TextStyle( - color: Color(0xFF797979), fontSize: 13), - ) - ], - ), - isStart + Expanded(child: Container( child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + isStart + ? I18n.of(context).translation_butler_start_service + : I18n.of(context).translation_butler_service_end, + textScaleFactor: 1.0, + style: TextStyle( + color: AppColors.NewAppbarTextColor, fontSize: 15), + ), + Text( + isStart + ? I18n.of(context).translation_butler_start_tips + : endStr, + textScaleFactor: 1.0, + style: TextStyle( + color: Color(0xFF797979), fontSize: 13), + ), + ], + ),)), + (isStart||UserData().isTranslateUser) ? Container() : Expanded( child: Container( diff --git a/lib/data/translate_hk_data_mgr.dart b/lib/data/translate_hk_data_mgr.dart index 5744bad..c367273 100644 --- a/lib/data/translate_hk_data_mgr.dart +++ b/lib/data/translate_hk_data_mgr.dart @@ -7,6 +7,7 @@ class TranslateOrder{ int tLanguage; int scenes; String desc; + String userName; } class TranslateHKMgr { @@ -25,6 +26,7 @@ class TranslateHKMgr { String orderId; ///用户发起的订单Id int waitNum=0; + int startWaitTime=0; bool isUser=false; ///是用户或者翻译官 diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 1f762a6..723618b 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -2489,6 +2489,32 @@ class I18n implements WidgetsLocalizations { String get total_friends_nus => "共/s1位朋友"; /// "有图片违规" String get hava_error_photo => "有图片违规"; + /// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知" + String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"; + /// "时间:今天/s1 时长:" + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + String get travel_start => "起点"; + /// "终点" + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + String get translation_butler_order_time_out => "翻译订单超时已被取消"; } class _I18n_en_US extends I18n { @@ -6185,6 +6211,42 @@ class _I18n_vi_VN extends I18n { /// "有图片违规" @override String get hava_error_photo => "有图片违规"; + /// "时间:今天/s1 时长:" + @override + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + @override + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + @override + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + @override + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + @override + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + @override + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + @override + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + @override + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + @override + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + @override + String get travel_start => "起点"; + /// "终点" + @override + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + @override + String get translation_butler_order_time_out => "翻译订单超时已被取消"; @override TextDirection get textDirection => TextDirection.ltr; @@ -9877,6 +9939,42 @@ class _I18n_zh_HK extends I18n { /// "有圖片違規" @override String get hava_error_photo => "有圖片違規"; + /// "时间:今天/s1 时长:" + @override + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + @override + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + @override + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + @override + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + @override + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + @override + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + @override + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + @override + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + @override + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + @override + String get travel_start => "起点"; + /// "终点" + @override + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + @override + String get translation_butler_order_time_out => "翻译订单超时已被取消"; @override TextDirection get textDirection => TextDirection.ltr; @@ -13569,6 +13667,45 @@ class _I18n_zh_CN extends _I18n_zh_HK { /// "有图片违规" @override String get hava_error_photo => "有图片违规"; + /// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知" + @override + String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"; + /// "时间:今天/s1 时长:" + @override + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + @override + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + @override + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + @override + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + @override + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + @override + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + @override + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + @override + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + @override + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + @override + String get travel_start => "起点"; + /// "终点" + @override + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + @override + String get translation_butler_order_time_out => "翻译订单超时已被取消"; @override TextDirection get textDirection => TextDirection.ltr; @@ -14795,9 +14932,9 @@ class _I18n_ko_KR extends I18n { /// "그의 사교 아이디" @override String get his_account => "그의 사교 아이디"; - /// "복제" + /// "복사" @override - String get copy => "복제"; + String get copy => "복사"; /// "내 사교 아이디를 보내기" @override String get send_account => "내 사교 아이디를 보내기"; @@ -15155,12 +15292,12 @@ class _I18n_ko_KR extends I18n { /// "앱을 친구에게 공유하다" @override String get share_app => "앱을 친구에게 공유하다"; - /// "질문이 있으니까 도움이 필요하다" + /// "질문&도움" @override - String get need_help => "질문이 있으니까 도움이 필요하다"; - /// "고객을 연락하다" + String get need_help => "질문&도움"; + /// "고객센터" @override - String get need_help2 => "고객을 연락하다"; + String get need_help2 => "고객센터"; /// "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!" @override String get need_help3 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"; @@ -17261,6 +17398,45 @@ class _I18n_ko_KR extends I18n { /// "有图片违规" @override String get hava_error_photo => "有图片违规"; + /// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知" + @override + String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"; + /// "时间:今天/s1 时长:" + @override + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + @override + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + @override + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + @override + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + @override + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + @override + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + @override + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + @override + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + @override + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + @override + String get travel_start => "起点"; + /// "终点" + @override + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + @override + String get translation_butler_order_time_out => "翻译订单超时已被取消"; @override TextDirection get textDirection => TextDirection.ltr; @@ -20953,6 +21129,42 @@ class _I18n_ja_JP extends I18n { /// "有图片违规" @override String get hava_error_photo => "有图片违规"; + /// "时间:今天/s1 时长:" + @override + String get translation_butler_push_order_time => "时间:今天/s1 时长:"; + /// "下单时间:今天/s1 等待时长:" + @override + String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:"; + /// "大神专属" + @override + String get translation_butler_title3 => "大神专属"; + /// "开启接单" + @override + String get translation_butler_start_receive_order => "开启接单"; + /// "未开启接单" + @override + String get translation_butler_stop_receive_order => "未开启接单"; + /// "翻译人员无法进入创建订单" + @override + String get translation_butler_stop_tips => "翻译人员无法进入创建订单"; + /// "场景:" + @override + String get translation_butler_scenes2 => "场景:"; + /// "[翻译管家服务开始]" + @override + String get translation_butler_last_item_start => "[翻译管家服务开始]"; + /// "[翻译管家服务结束]" + @override + String get translation_butler_last_item_end => "[翻译管家服务结束]"; + /// "起点" + @override + String get travel_start => "起点"; + /// "终点" + @override + String get travel_end => "终点"; + /// "翻译订单超时已被取消" + @override + String get translation_butler_order_time_out => "翻译订单超时已被取消"; @override TextDirection get textDirection => TextDirection.ltr; diff --git a/lib/home/homeMain.dart b/lib/home/homeMain.dart index f4cb2bc..5c7c622 100644 --- a/lib/home/homeMain.dart +++ b/lib/home/homeMain.dart @@ -279,7 +279,7 @@ class _HomeMainState extends State { TranslateOrder order = data; - CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: order.orderId,scenes: order.scenes,desc: order.desc,createTime: order.createTime); + CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: order.orderId,scenes: order.scenes,desc: order.desc,createTime: order.createTime,userName: order.userName); } startTranslateHKChat(var friendID){ diff --git a/lib/home/realtimehelper/real_time_helper_page.dart b/lib/home/realtimehelper/real_time_helper_page.dart index d25ef1e..11545d5 100644 --- a/lib/home/realtimehelper/real_time_helper_page.dart +++ b/lib/home/realtimehelper/real_time_helper_page.dart @@ -3,7 +3,10 @@ import 'package:chat/home/realtimehelper/translation_butler_page.dart'; import 'package:chat/home/realtimehelper/travel_butler_page.dart'; import 'package:chat/models/group_info_model.dart'; import 'package:chat/utils/HttpUtil.dart'; +import 'package:chat/utils/MessageMgr.dart'; +import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/screen.dart'; +import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:oktoast/oktoast.dart'; @@ -25,19 +28,64 @@ class RealTimeHelperPage extends StatefulWidget { class RealTimeHelperPageState extends State { - bool isTranslateHKLogin = true; + bool isTranslateHKLogin = false; + + bool isReady=false; @override void initState() { super.initState(); + MessageMgr().on('update_system',refresh); + WidgetsBinding.instance.addPostFrameCallback((_) { + isTranslateAndStatus(); + }); + } + refresh(args){ + isTranslateAndStatus(); + } + + + ///实时帮-翻译人员状态,是否是翻译人员 + isTranslateAndStatus() async { + Map data = { + "userId": UserData().basicInfo.userId, + }; + data['sign'] = TokenMgr().getSign(data); + Response res = await HttpUtil().post('steward/userStatus', data: data); + + if (res == null) { + print('请求异常'); + return; + } + var resData = res.data; + if (resData['code'] == 0) { + isReady=true; + print('xxxdksldsd $resData'); + UserData().isTranslateUser = resData['data']['isTranslateUser'] == 1; + int status = resData['data']['Status'] ; + + if(status==1){ + isTranslateHKLogin=true; + } + + setState(() { + }); + print('翻译人员状态 status $status isTranslateUser ${UserData().isTranslateUser} '); + }else{ + print('获取翻译人员翻译人员状态 失败 ${resData['msg']}'); + } + } + + @override void dispose() { -// MessageMgr().off('Update Group Info', updateGroupInfo); super.dispose(); + MessageMgr().on('update_system',refresh); } + @override Widget build(BuildContext context) { Widget appBar = AppBar( @@ -80,7 +128,7 @@ class RealTimeHelperPageState extends State { children: [ Container( alignment: Alignment.center, - child: fixedText('大神专属', color: Colors.white, fontSize: 21), + child: fixedText(I18n.of(context).translation_butler_title3, color: Colors.white, fontSize: 21), ), UnconstrainedBox(child: InkWell(onTap: (){ @@ -99,16 +147,16 @@ class RealTimeHelperPageState extends State { decoration: BoxDecoration( border: Border.all(color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, width: 1), borderRadius: BorderRadius.circular(11)), - child: fixedText(isTranslateHKLogin?'开启接单':'未开启接单', color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, fontSize: 15), + child: fixedText(isTranslateHKLogin?I18n.of(context).translation_butler_start_receive_order:I18n.of(context).translation_butler_stop_receive_order, color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, fontSize: 15), ),),), Container( padding: EdgeInsets.only(left: 13,top: 20), - child: fixedText('实时帮', color: Colors.white, fontSize: 22,fontWeight: FontWeight.w700), + child: fixedText(I18n.of(context).real_time_helper, color: Colors.white, fontSize: 22,fontWeight: FontWeight.w700), ), helperCard(I18n.of(context).translation_butler, R.assetsImagesImgTranslationButler, () { if (UserData().isTranslateUser) { - showToast('翻译人员无法进入创建订单'); + showToast(I18n.of(context).translation_butler_stop_tips); } else { Navigator.of(context).push( MaterialPageRoute( @@ -199,7 +247,7 @@ class RealTimeHelperPageState extends State { ), ), ), - onTap: callBack, + onTap: isReady?callBack:null, ); } } diff --git a/lib/home/realtimehelper/translation_butler_page.dart b/lib/home/realtimehelper/translation_butler_page.dart index 76936ca..e7de360 100644 --- a/lib/home/realtimehelper/translation_butler_page.dart +++ b/lib/home/realtimehelper/translation_butler_page.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:ffi'; import 'package:chat/data/UserData.dart'; import 'package:chat/data/translate_hk_data_mgr.dart'; @@ -84,6 +85,12 @@ class TranslationButlerPageState extends State { setState(() {}); } + ///订单没有人接,超时,服务器会发送取消订单通知 + cancelOrder(args){ + TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; + refreshOrder(null); + } + @override void initState() { super.initState(); @@ -94,7 +101,7 @@ class TranslationButlerPageState extends State { initData(); MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); - + MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -143,7 +150,7 @@ class TranslationButlerPageState extends State { return; } isCreatingOrder=true; - + TranslateHKMgr().startWaitTime=DateTime.now().millisecondsSinceEpoch; MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); extraMsg=''; @@ -176,6 +183,7 @@ class TranslationButlerPageState extends State { void dispose() { waitTimer?.cancel(); MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); + MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { print('保存时间戳$timeStamp'); SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); diff --git a/lib/home/realtimehelper/translation_order_push_dialog.dart b/lib/home/realtimehelper/translation_order_push_dialog.dart index 5e37a87..fe42c31 100644 --- a/lib/home/realtimehelper/translation_order_push_dialog.dart +++ b/lib/home/realtimehelper/translation_order_push_dialog.dart @@ -1,3 +1,4 @@ +import 'package:chat/data/UserData.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/data/translate_hk_data_mgr.dart'; import 'package:chat/generated/i18n.dart'; @@ -18,13 +19,15 @@ class TranslateOrderPushPage extends StatefulWidget { String desc; Function userStartChat; int createTime; + String userName; TranslateOrderPushPage(this.isUser, {this.orderId, this.scenes, this.desc, this.userStartChat, - this.createTime}); + this.createTime, + this.userName}); @override State createState() { @@ -59,6 +62,10 @@ class TranslateOrderPushPageState extends State { super.didChangeDependencies(); } + String withZero(int num){ + return num<10?'0$num':'$num'; + } + @override Widget build(BuildContext context) { // TODO: implement build @@ -69,8 +76,19 @@ class TranslateOrderPushPageState extends State { I18n.of(context).translation_scenes_4, ]; - String translateStr= '时间:今天11:45 时长:5${I18n.of(context).minute}'; - String userStr= '下单时间:今天11:45 等待时长:10分钟'; + DateTime date = UserData().isTranslateUser?DateTime.now():DateTime.fromMillisecondsSinceEpoch(TranslateHKMgr().startWaitTime); + String time = '${withZero(date.hour)}:${withZero(date.minute)}'; + + int second = (DateTime.now().millisecondsSinceEpoch-TranslateHKMgr().startWaitTime)~/1000; + String userWaitStr ; + if( second>60){ + userWaitStr = (second~/60).toString()+I18n.of(context).minute; + }else{ + userWaitStr = second.toString()+I18n.of(context).second; + } + + String translateStr= I18n.of(context).translation_butler_push_order_time.replaceAll('/s1', time)+'5${I18n.of(context).minute}'; + String userStr= I18n.of(context).translation_butler_push_order_time2.replaceAll('/s1', time)+userWaitStr; return UnconstrainedBox( alignment: Alignment.topCenter, @@ -109,7 +127,7 @@ class TranslateOrderPushPageState extends State { ), Text( I18n.of(context).translation_butler_dialog_order.replaceAll( - '/s1', widget.isUser ? I18n.of(context).you : 'xxx'), + '/s1', widget.isUser ? I18n.of(context).you : widget.userName), textScaleFactor: 1.0, textAlign: TextAlign.left, style: TextStyle( @@ -128,7 +146,7 @@ class TranslateOrderPushPageState extends State { widget.isUser ? Container() : Text( - '场景:${scenesList[widget.scenes]}', + '${I18n.of(context).translation_butler_scenes2}:${scenesList[widget.scenes]}', textScaleFactor: 1.0, textAlign: TextAlign.left, style: @@ -138,7 +156,7 @@ class TranslateOrderPushPageState extends State { widget.isUser ? Container() : Text( - '更多描述:${widget.desc}', + '${I18n.of(context).translation_more_desc}:${widget.desc}', textScaleFactor: 1.0, textAlign: TextAlign.left, style: diff --git a/lib/home/realtimehelper/travel_butler_page.dart b/lib/home/realtimehelper/travel_butler_page.dart index 23b90e3..75b55bd 100644 --- a/lib/home/realtimehelper/travel_butler_page.dart +++ b/lib/home/realtimehelper/travel_butler_page.dart @@ -247,7 +247,7 @@ class TravelButlerPageState extends State { Widget positionLayout(bool isStart){ - String str = isStart?'我的位置':'你要去哪儿'; + String str = isStart?I18n.of(context).travel_my_location:I18n.of(context).travel_go_where; if(isStart && startResult!=null && startResult.address!=null){ str = startResult.address; }else if (!isStart && endResult!=null &&endResult.address!=null){ @@ -255,7 +255,7 @@ class TravelButlerPageState extends State { } return Container(height:50,child: Row(mainAxisSize: MainAxisSize.max, children: [ Expanded(child: Container( child: fixedText(str,color: Colors.black,fontSize: 16),)), - fixedText(isStart?'起点':'终点',color: Color(0xff797979),fontSize: 14) + fixedText(isStart?I18n.of(context).travel_start:I18n.of(context).travel_end,color: Color(0xff797979),fontSize: 14) ],),); diff --git a/lib/models/last_msg_description.dart b/lib/models/last_msg_description.dart index 79534d0..f015afb 100644 --- a/lib/models/last_msg_description.dart +++ b/lib/models/last_msg_description.dart @@ -140,15 +140,14 @@ class _LastMsgDescriptionState extends State { if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ ///翻译管家的 通知消息 - desc = '翻译管家---'; print('翻译管家的 通知消息-'); TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); if(res.noticeType==TransHKChatNoticeType.StartChat){ - return '[翻译管家服务开始]'; + desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_start; }else if(res.noticeType==TransHKChatNoticeType.EndChat){ - return '[翻译管家服务结束]'; + desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_end; }else{ - return ''; + desc = ''; } diff --git a/lib/proto/transhousekeeper.pb.dart b/lib/proto/transhousekeeper.pb.dart index e894ef5..927f703 100644 --- a/lib/proto/transhousekeeper.pb.dart +++ b/lib/proto/transhousekeeper.pb.dart @@ -263,10 +263,11 @@ class EndTransHKOrderRes extends $pb.GeneratedMessage { class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeliveryTransHKOrderPush', package: const $pb.PackageName('yl_pb')) ..aOS(1, 'orderId') - ..aInt64(2, 'createTime') - ..a<$core.int>(3, 'tLanguage', $pb.PbFieldType.OU3) - ..a<$core.int>(4, 'scenes', $pb.PbFieldType.O3) - ..aOS(5, 'desc') + ..a<$0.BaseUserInfo>(2, 'employer', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) + ..aInt64(3, 'createTime') + ..a<$core.int>(4, 'tLanguage', $pb.PbFieldType.OU3) + ..a<$core.int>(5, 'scenes', $pb.PbFieldType.O3) + ..aOS(6, 'desc') ..hasRequiredFields = false ; @@ -289,25 +290,30 @@ class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { $core.bool hasOrderId() => $_has(0); void clearOrderId() => clearField(1); - Int64 get createTime => $_getI64(1); - set createTime(Int64 v) { $_setInt64(1, v); } - $core.bool hasCreateTime() => $_has(1); - void clearCreateTime() => clearField(2); - - $core.int get tLanguage => $_get(2, 0); - set tLanguage($core.int v) { $_setUnsignedInt32(2, v); } - $core.bool hasTLanguage() => $_has(2); - void clearTLanguage() => clearField(3); - - $core.int get scenes => $_get(3, 0); - set scenes($core.int v) { $_setSignedInt32(3, v); } - $core.bool hasScenes() => $_has(3); - void clearScenes() => clearField(4); - - $core.String get desc => $_getS(4, ''); - set desc($core.String v) { $_setString(4, v); } - $core.bool hasDesc() => $_has(4); - void clearDesc() => clearField(5); + $0.BaseUserInfo get employer => $_getN(1); + set employer($0.BaseUserInfo v) { setField(2, v); } + $core.bool hasEmployer() => $_has(1); + void clearEmployer() => clearField(2); + + Int64 get createTime => $_getI64(2); + set createTime(Int64 v) { $_setInt64(2, v); } + $core.bool hasCreateTime() => $_has(2); + void clearCreateTime() => clearField(3); + + $core.int get tLanguage => $_get(3, 0); + set tLanguage($core.int v) { $_setUnsignedInt32(3, v); } + $core.bool hasTLanguage() => $_has(3); + void clearTLanguage() => clearField(4); + + $core.int get scenes => $_get(4, 0); + set scenes($core.int v) { $_setSignedInt32(4, v); } + $core.bool hasScenes() => $_has(4); + void clearScenes() => clearField(5); + + $core.String get desc => $_getS(5, ''); + set desc($core.String v) { $_setString(5, v); } + $core.bool hasDesc() => $_has(5); + void clearDesc() => clearField(6); } class CancellationTransHKOrderPush extends $pb.GeneratedMessage { diff --git a/lib/proto/transhousekeeper.pbjson.dart b/lib/proto/transhousekeeper.pbjson.dart index b05cd9a..39c5d9b 100644 --- a/lib/proto/transhousekeeper.pbjson.dart +++ b/lib/proto/transhousekeeper.pbjson.dart @@ -90,10 +90,11 @@ const DeliveryTransHKOrderPush$json = const { '1': 'DeliveryTransHKOrderPush', '2': const [ const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'}, - const {'1': 'CreateTime', '3': 2, '4': 1, '5': 3, '10': 'CreateTime'}, - const {'1': 'TLanguage', '3': 3, '4': 1, '5': 13, '10': 'TLanguage'}, - const {'1': 'Scenes', '3': 4, '4': 1, '5': 5, '10': 'Scenes'}, - const {'1': 'Desc', '3': 5, '4': 1, '5': 9, '10': 'Desc'}, + const {'1': 'Employer', '3': 2, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Employer'}, + const {'1': 'CreateTime', '3': 3, '4': 1, '5': 3, '10': 'CreateTime'}, + const {'1': 'TLanguage', '3': 4, '4': 1, '5': 13, '10': 'TLanguage'}, + const {'1': 'Scenes', '3': 5, '4': 1, '5': 5, '10': 'Scenes'}, + const {'1': 'Desc', '3': 6, '4': 1, '5': 9, '10': 'Desc'}, ], }; diff --git a/lib/proto/transhousekeeper.proto b/lib/proto/transhousekeeper.proto index 560662f..0fa63a7 100644 --- a/lib/proto/transhousekeeper.proto +++ b/lib/proto/transhousekeeper.proto @@ -68,10 +68,11 @@ message EndTransHKOrderRes{ //Msg= 20 派送订单推送 message DeliveryTransHKOrderPush { optional string OrderId =1; //订单号 - optional int64 CreateTime = 2; //创建时间 - optional uint32 TLanguage =3; //翻译语言 - optional int32 Scenes =4; //场景 - optional string Desc =5; //描述 + optional BaseUserInfo Employer = 2; //雇主 + optional int64 CreateTime = 3; //创建时间 + optional uint32 TLanguage =4; //翻译语言 + optional int32 Scenes =5; //场景 + optional string Desc =6; //描述 } //Msg= 21 订单取消推送 diff --git a/lib/utils/CustomUI.dart b/lib/utils/CustomUI.dart index 496400c..13bebaa 100644 --- a/lib/utils/CustomUI.dart +++ b/lib/utils/CustomUI.dart @@ -1267,11 +1267,11 @@ class CustomUI { ///** isUser 是否是用户,或为 翻译 static void buildTranslationHelperOrderDialog( BuildContext context, bool isUser, - {String orderId, int scenes = 0, String desc,Function userStartChat,int createTime}) { + {String orderId, int scenes = 0, String desc,Function userStartChat,int createTime,String userName}) { Navigator.of(context).push(TutorialOverlay( - child: TranslateOrderPushPage(isUser,orderId: orderId,scenes: scenes,desc: desc,userStartChat: userStartChat,createTime: createTime,), + child: TranslateOrderPushPage(isUser,orderId: orderId,scenes: scenes,desc: desc,userStartChat: userStartChat,createTime: createTime,userName: userName,), )); } diff --git a/lib/utils/HttpUtil.dart b/lib/utils/HttpUtil.dart index 043ba06..f4a5a37 100644 --- a/lib/utils/HttpUtil.dart +++ b/lib/utils/HttpUtil.dart @@ -1502,6 +1502,7 @@ String mobileType = ''; "type": isLogin?1:2, }; data['sign'] = TokenMgr().getSign(data); + print('请求data : $data'); Response res = await HttpUtil().post('steward/loginRecord', data: data); if (res == null) { @@ -1516,4 +1517,8 @@ String mobileType = ''; print('翻译人员上线、下线 失败 ${resData['msg']}'); } } + + + + } diff --git a/lib/utils/msgHandler.dart b/lib/utils/msgHandler.dart index 50bc660..0359296 100644 --- a/lib/utils/msgHandler.dart +++ b/lib/utils/msgHandler.dart @@ -1342,6 +1342,7 @@ class MsgHandler { order.createTime=res.createTime.toInt(); order.tLanguage=res.tLanguage.toInt(); order.scenes=res.scenes.toInt(); + order.userName = res.employer.niceName; TranslateHKMgr().order = order; MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order); @@ -1356,7 +1357,7 @@ class MsgHandler { TranslateHKMgr().order = null; MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER); - showToast('派送订单已被取消'); + showToast(I18n.of(context).translation_butler_order_time_out); } From 81c28f9c954a27b2453da76e51b7ec7c3f76017c Mon Sep 17 00:00:00 2001 From: jiahao <283739569@qq.com> Date: Tue, 31 Mar 2020 19:07:20 +0800 Subject: [PATCH 4/4] 1 --- lib/home/realtimehelper/translation_butler_page.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/home/realtimehelper/translation_butler_page.dart b/lib/home/realtimehelper/translation_butler_page.dart index e7de360..1cb08cf 100644 --- a/lib/home/realtimehelper/translation_butler_page.dart +++ b/lib/home/realtimehelper/translation_butler_page.dart @@ -86,7 +86,7 @@ class TranslationButlerPageState extends State { } ///订单没有人接,超时,服务器会发送取消订单通知 - cancelOrder(args){ + canceledOrder(args){ TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; refreshOrder(null); } @@ -101,7 +101,7 @@ class TranslationButlerPageState extends State { initData(); MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); - MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); + MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, canceledOrder); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -183,7 +183,7 @@ class TranslationButlerPageState extends State { void dispose() { waitTimer?.cancel(); MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); - MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); + MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, canceledOrder); if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { print('保存时间戳$timeStamp'); SPUtils.save(Constants.TranslationHelper, timeStamp.toString());