From 7211d15be2215ba4ab4c97f8e9d3023c724baa46 Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Fri, 12 Aug 2022 15:47:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/res/ic_launcher.png | Bin 0 -> 36980 bytes .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 2252 bytes .../src/main/res/mipmap-ldpi/ic_launcher.png | Bin 0 -> 1403 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 1586 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 2962 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 5407 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 6928 bytes assets/icons/sms.png | Bin 0 -> 1186 bytes lib/main.dart | 60 ++++++----- lib/ui/home/content_page.dart | 24 +++-- lib/ui/user/members_page.dart | 93 +++++++++++++++--- lib/ui/user/user_page.dart | 1 + 12 files changed, 130 insertions(+), 48 deletions(-) create mode 100644 android/app/src/main/res/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-ldpi/ic_launcher.png create mode 100644 assets/icons/sms.png diff --git a/android/app/src/main/res/ic_launcher.png b/android/app/src/main/res/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7325a57085738b0ef5fbdb1fbceb998506e460a7 GIT binary patch literal 36980 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%0D%bn!xhVzJV^tRJg2?soW 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..ab4708f9ac6d7b8a2eda348cb53a12b1d3a17658 100644 GIT binary patch literal 2252 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 AQ2+n{ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..36a6abbded18a65980dde342ebcbae44d2a04438 GIT binary patch literal 1403 zcmaiyX-rgS7=f`}{*FqhdFm>HPmp5FFffAvew`{cZN&-dedztjM>w~f_G zD}o?wSWHhY&9(o?(wwe+L;FNDEPi(LcO!_$nbyXr1++Jd=X$#nkJ?sAY4d$Flj~0q z=hhKK@+E@M)2-x5f;j0!5TuYGoO1|b#j(69&Q5~(A}hczkO81WZ!Fi&-PLFdw3>=J zZHHlAVxZDg^MRy>KQ$XHQ-{i@LlvqJr6Ncr3!0v~rd3Hy#$1(&JFX9zoC_y)kyF}8 z*{o1LBUGq`N>!9fDV&xIrlp&$9MV&R zdQ+lOCsu*c3{EF_J>U;PIEs`hJei^DG$yHm0;msqQ_*L5H6frKyne(Cp;(S?9Y*w+ zG*C(-r8QCK6}lTA;q?aW7I1rzCq?57S~cj^VQ3!X21;k5ie~g-r1ts;FdE?B1a>Em z529R#8WkGUXxHGq4#V@9Hd6E%HBd=%y@1qR?}x`L_`ZQ}E3S{AltiT*wJKDpP_D$N z9ttDXHAf}Oj3E>HYwzGz3syb+n&97pyfGAxLnOt`aU2@Lp<%pKV{{%38eAZ$j6S&5 zfLRBhMg+AWX9Ty$kU9)bAGq)Fs|0ssI601>F{Jmvr3zlP$QVTWM+DGs)d${t@ID}| z3p<~ILElpk??$lRB6two34LlOc2vTn3MuW_{sivNaHSPLmcz9Yf$xylhfN~5JO-x+ zb4L915ME-Wb%Xw{>ZG_V8fJTZy*&pM=IbufX5lerNIXsEzw&B2=t2*OS)Oiz+nS?= zU$c_4Qg2<(wz+F{YB77`k#8eh63yIJ3l3ajcsA7ku(s%aY>ecyZN+*{AeYbC&AVFC z)zQ<%uP&?ReK7r#`r~J#GDlMRpq;AC?_{DLN#VeY2`=tN4%Vp{D)@ z+cI(M$JgD>c4a>7CH`5N<=+KlKS**F1~_>z?Sr$+2vKf@Dur1fDw)iA|9sBkif79D z#GU|uAGVpu$KSX8ZHu@qN@&@1lBl|qY0Kb5B)a){-izeKvG#|YJ+;8xBi6Pfv&PXr zO?2>pHJ2pqR^HAH3;lCoV25*c^6I+R8HFX)#m}A=lqbEaXWc0N%`bmzLZe@p@J!t1 zd-l0o&a;(+XJ=M83M$Vub;ULZSycVvo}Ipw(J9_tI#Cu>@O zuf(k);Z0j_{JGO|cK@;$r$15l%tfik3)VXyQ+2fUUd>#U|CQCk-=l{sg0{C^7fseT z@vge=H8WZAii#aGmOB);=P`J(qS8xuEZg#Hlgr4$^z78dUWL^s=B=KHO51KW=CBk4 zn&yf2yq(XZdu4ZWjdmk0?B&5-8(;tBJHfvD{6&JKOhMM%ce;{gL6mHJXp^Fn3+eSb zo(l{<5fgPH);aokEDeINe7AX%)26O16-42ZHESHAtsOj;9X7XiFgGXMmo8Wt@3chx epWNZ2G5hzP{oh>Ng?*Rl9Km9+Js-IXFa8a2X)fsi literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..c36cfc6ce82bf3148459bedeca14bea31bd1b8a6 100644 GIT binary patch literal 1586 zcmai!dpHw%7{`BOnC7xsWf-}Ig*LQIB)7%VW*iynXiG)Sm|GEPGRv*oiGyR6p+cfX zH&mO1YLO(Sa~KjCWVxVzDpX;aMx(VWUGws) zc%`|CP5M^jO{Z@S|T`Ikn zTVZmQtIJJ<%K-YHB0S-f>+7@U28xpF9ez{8Px9PPMtd6nkz{qf8gj@4yOr=0bqAKJ zW6RI8K-=&On09S9#`~{zW!D@jVz48osq+ily8HvNe57G+VRpFqezy(3s)m;y^w`F& zc;jI$dEerwwz5QWNsYPSpdt(LLR8T2J^YGS`o5w(l?CS$AQ-l|!f?s7&P%H}G_147 zj~pCTCX+^OH8EyPtVl`G9tr1$W6U7-DbUSqLEogQ|5#pP`(V3Nf7kmlwfTPj&<}p6 z*oYB-aiRdxiy>eVTye=^146)GBplDmA>|O&64MR6inB*u{D^FW(UW!M{TcEXpEyEO zhlI$9<)>&UXWi407J`*^GtBQ#V<9?e)64RbXX*#dol$2yMYcy|Z>?(7{E8Hbto(Xr zu(te!M$f9WHv3i`A4=Kc?uE$C<^iW5YS#yfM+XBIqeoJ<4AeqtbxN}+aJmq;dQ!x7 z!($3UP%@-MJs&@w>&7F`pg9dEqkdd~8g5>&RU6?oJ#*CS`qB^PKjWUCYJg7oz`S`b zGB-%GD7wo&HJgldcCkc`MR!Nf{*q%ZAX3i^)(2z7`FCjBH_{_BjXD@lZ{H-#Hs$=R z9an%6q0M4VI?*?Qg;+!_h&%w3B(4bz)aRaY<6LngekJ5U)6xv4nk0JqbrM4E^4zl; z+#}gzOENt7U}`hIDq)uwzVlp01-r}Jlk~St@`zY|&=5*2)rD%sh>WF)R zC^fMt0{H3b{`5){A5tE6SyIgj+&)6i^wQhJBn2H#UG2MVFZVTDxpqlA3OdP3zdIzG zJik`nfYoZPpxa)}-1)Fa{w&Y}S7m4GOiUttK-TdJF3+3l)vWW=lC5*H1e(?}C95$v zU@j;H%j)r*U8^TODQHzQ=kuQQrMUOg>O!8?oMaBRw(>k6YQ>ax>@*}XJz~3~f(J9q z!BerYuJ)rz;fAvFn=E=9SsM43It;tt!i7UD2{HriAWEt2G|lYdrRIl-A$krCQ-^Je zGo5nUKVf~-2vP36S$@Z;`}wg1`ikYEoeYhpBa3`s6^s>%M|))StodbTjI)}%t~hHw zfeSTFbKMQnQdeWhPabV}xdE-{(Gs@Y@eDP_ejZ62PAy@~^hgGt$;&UWP*FxeuGC0d zxX)pHLSBo#C>wEFd7yVM=cNsisD8AMc0IJwr1E`!U$58)eoTIR$~)xuxyvJcJrcH) zlq$Y4U`1;WDe|+qO?YnlS|F17GGd5S{17s4_ JuhEBb@K0Ulo)G{5 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U!k)_7W z*vDG-rNNs}wo7)o^WOjNANRS>bI>fE#0MXvw6@ z-wEPi*7=v=NG48s>0j3efSNSOkt;j1X9>16LIb3J(Pd^M>27R!9RMQE0YD5901lX= zm?Z!RRRw?*7XZ+H2>?R4ye112bHU+eYGlYHGxiOdqnQBXjBSINH2!y9>%ON809^Mm zhWb|c$<@5>ccMmOomW0N-I;YeR5Cw$KhaMOg9awDw1a3YVC5JaX&widyfWwp?Vl<* zxgwCPavn^G=llh?OQ%jh1>`Iw+xiz}pR6Kl7WP(qFF4*3t!ys$nx*GvBQ!s68K0C6 zZCizoZAV`Db$HxVdCxB8Vge;dU1ePW|IVI8(n}He%a=VSuL^itdj<%qXVvS!4RlR# z0hj*!GOh(%lsf`-uuSevUsS4UtkAq?SDRGq50!?2%pml{PQL_6Lx2bnBg`>Ig#i~(r>7z< z(oU1hw2!>ItN*-So7gWYySmCvNdcvq(Sz1O2E$!|!)r=fR?%HE0$=ATwD8^z4Z3?+ zX3?dVlfDtJfQo=r`jDA{&uUQVF-s*)G8lZY!Bo40uiF&dp`l-P7}Co zqm?wZrVjLw-4QOA?t%)@OXuca5=(Bm@7a247H~~?0a2|`73;3;11;E&J~HB#(GjWs z!zaLjL|N!nifedSjin4ptk^q`_fK3tPJH`272In>vg;fFXzr=;U))4z3~ zac8NTRe0UXKrI}?By5Exx}}}eIunXikcn*k>*5daBSR!#gy?2GhRA6m9*&>wU-%rh zEBNHM<-5k`^nA`1`$ykL7t9U5&(3DZ1L$z94YWv>(tTr(R+_c*$~3g^>zm}y#hjsy zr0^}G&4&2pxwy(2kGk5a+`L$7!PQ(@ARZ*UEXdu&QC7Xxx4t zfcI0^{UmO<${q*Eo8T@u)v3ziupmgWsuYLBhFlbjc5oi+QLH45Gjx-vs1U?T#_%-0 z?*ksbTMQo{bILQkK_6q=`B6v~BUZxu9*}~d9bECF+D`C60m~$`I9))H!;C&wmwU-l z9`Lskq42QkL-VqU_a%B*cVDd5t7Qun@xgcPX=B3Yt1utLh+q*)J(iv?)$(RKB`F`U zAt8vOGyy?VTrRI%EWtF)$5q-_A&3htqNj~V%Y%4{;stzb8?BcI#HzHLEEZ0YBk~I< zz5bq$P)MiuPB`ncoxz`vhU=ncm%-W#;C#txf$_r2N>#4qySTb#Z_6$WKdE9-Ht!!! z0$UZ}!~4pqzxw=2*Eczn*w2Xzn?~}LOnU5%Dwdc)<Zi)@4n;l$QDt5>!mFDA@;=Q&Qn_^e)W%4Wo_l2WAE2CTU|$U*22UZ8GF zZvJH@Ea1amMhFP74zKe~D|~is$$RBjzMgT%O}CoiW4l)1M#ly%bMckhTOYiU=93@X zXf~TAZe36?hh*wEF{1ffM@L%*&ZRdlrDzoxBwY}Ac1k~~n13TD|UQUiS&IX8L7dqI0R7%#bt7F8<{Gg@8j>ZmVg5ZY7w zu+GD)ZT1TW<=RWWqL9GN-D`q$9`m-Nnw-G=CFB8H-X)G$GcmHSUXH;qo+PC+^Rd$9 zdizZtHl;%{S5ZX7`fNEQ$IL5ntMYn69^V_0{Z`h2u>L(bhzfgdZmOOEOXAQ@O`_Nb!_( z&Ja^deh&{mb>Z`@#KX6W`25AMO=q&q^j z;N;Q(YJYMvHN9@_N~1j94QU;=8=!^|*IUOR?ZaAGAKy&9sOJ{oOU-=|#u^4BImWm0 z^A?wVYYeepBFtDQ64i?bT1qTb8=L+p#Ovkm&h(6~;G(!!CTDFr$s>Mv&yroOgOB@# z^NC5cLV{!L?lPv~L;}9z>8(K^HwhYM-HG@j%xHN)51-Lt)BW z-mf_?igju3vKago^!dkg&0Cb|rxL|#&k2+d5Tpydm>j+s-;QgX*I|45D<%+zd#csL z`c((&b!}T!Ngg21W^5o0UT)1D8ZjP}+`o~m1E|Z{y!ocWko3z_rpiFVlvd97fn#{- zZ6m)nm)eil)*&bq#JQk$szgg3&<#HQJMz+r)Aai9^+Mu1iJAuWEj4+dUx{oa#He8Y zK+2F>~Vn(0L^GS=44DmBO^yi6gUFjV{lmTktMo`OGTM_S4r4$M@qSsy2);$D++a0 zCdPx2T44ECbALT|Bxv+&38pDWsZ71xO*@JHKb#xW)=ixN?sWH^T3F=YCig;wl}(6; zYlx?|dypp+000_OS5s9R)~p8pgvrP#xy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..4ee0905d7a801edd805556d6621a3824f62bc439 100644 GIT binary patch literal 5407 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 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..b13fdb61097aeef30a16711374ac6e4300676911 100644 GIT binary patch literal 6928 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 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/assets/icons/sms.png b/assets/icons/sms.png new file mode 100644 index 0000000000000000000000000000000000000000..617b2c66b31bd9d08735c1041a7e719b613d64b4 GIT binary patch literal 1186 zcmV;T1YP@yP)Px(TuDShRA@u(m``XNRUF5^zu6?a3nHYK(tujfgKiSZ&Wnk(SQP0&h@vQ1RC*IP z+u}v=-zf*N6~v3UNs1Ris6D9o2RtZB75^+dzp-cxdQz&CrihekOk$G#$qSqEGCQ+7 zGy8T+p%3OV`+ILbpZ9z7-fxz0l{dP|`EgAkDuZKVV|$6{Mk4yJzrTO6TCHB{Mz*bF zpin3b{N3W>;y*F6 zvLmD$5|IK*sS^O6Gzcopd?YD!Fy6LAD}kQ?6t)2z$2nN5)jsP~K=-#P5h|ef`CKmd zr?FLTtgNgIrdc*o!nPzr1%m4zfX~dz#_XG8*pLVn2pRZwW_~&-Fh4)Pr(UnW24F}; zj+e{jPm)S@DiI~{C4jq(9q5qn`=^3%v$L}&0UT=F-yotVN~Ka$Tsx^wB$@iQ4x9jN=bwXya(W+ZD1lg>UrK9t=4g`Bt+yM-}iM1bGd~H zoHsv49LFivYPB=%Uc_EVh{$iNtE;2td9*`7e+FhUnO_aqOU%5hQB}5cKrbY8LCDO< zFRu`js#q)@a2!YPEL%-PPW!%pcUy8JpbHXu`IZeP&-Z=(1-R9AWFTY*`k9$^JtUSS z?k$x{`izO)lu~;DoHIIHWahz8fyv3q>(|%UFA!1I=5YdTJsq|Em zv0T?xMC2KL&NH)?YR-VZqm+6Jz~R6{jxqC#Ngk|YLnO-6)6=tY#~B?R9UK@K_#D8P z(dT1kzCTi6WMpJ_Hk;KS+(VWm^hy1=h@4qkTAH7knW@JSXu#|8-8JKh=t0l(K8O_1 zKa7u$7ez#O);o~dQe`3zuo)8tFCy>yzW>M$p{T)?Qri5}UQ0y51NZ{K6f^%DOQ7*S z^i(1#yk>0szfi9-kp@1NKrb?p7CyE>HzhiOPbAO{iB91Y3)qyf0iR01hJ-En)B>GI z*o5y$AdQ4=_>KjVNOS|Vbpbt~>$0q3-C1eg@~ literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index f528395..3de4cd3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,8 +7,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_sms/flutter_sms.dart'; +import 'package:fluwx/fluwx.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart'; import 'package:power_logger/power_logger.dart'; +import 'package:fluwx/fluwx.dart' as fluwx; import 'package:project_telephony/providers/user_provider.dart'; import 'package:project_telephony/ui/tab_navigator.dart'; @@ -16,12 +18,14 @@ import 'package:provider/provider.dart'; import 'package:telephony/telephony.dart'; import 'package:project_telephony/utils/hive_store.dart'; -void _sendSMS(String message, List recipents) async { - String _result = await sendSMS(message: message, recipients: recipents) - .catchError((onError) { - print(onError); - }); - print(_result); +void _sendSMS(String message, List recipients) async { + try{ + String result = + await sendSMS(message: message, recipients: recipients, sendDirect: true); + print(result); + } on PlatformException catch(e){ + print(e.toString()); + } } void main() async { @@ -60,19 +64,18 @@ void onIosBackground() { void onStart() { int flag = 0; - String? phoneNum, callState; + String phoneNum; + String callState; WidgetsFlutterBinding.ensureInitialized(); - Timer.periodic(const Duration(seconds: 1), (timer) async { CallState state = await Telephony.instance.callState; callState = state.name; - print(callState!+" $flag"); + // print(callState!+" $flag"); if (callState == "IDLE") { if (flag != 0) { flag = 0; // print("object"); final Iterable result = await CallLog.query(); - phoneNum = result.first.number; // print(phoneNum); // String message = "This is a test message!"; // List recipents = ["10000", "10086"]; @@ -81,18 +84,27 @@ void onStart() { // print(onError); // }); // print(_result); - phoneNum = result.first.number; - print(phoneNum); - final SmsSendStatusListener listener = (SendStatus status) { - print(status); - }; - Phone.telephony.sendSms( - to: phoneNum!, - message: "hello", - statusListener: listener, - isMultipart: true, - - ); + phoneNum = result.first.number!; + // List recipents=[ + // phoneNum + // ]; + if(phoneNum.isEmpty){ + print("At Least 1 Person or Message Required"); + }else{ + print("你好"+phoneNum); + _sendSMS("你好", [phoneNum]); + print("你好"+phoneNum); + } + // final SmsSendStatusListener listener = (SendStatus status) { + // print(status); + // }; + // Phone.telephony.sendSms( + // to: phoneNum!, + // message: "hello", + // statusListener: listener, + // isMultipart: true, + // + // ); } } else if (callState == "RINGING") { flag++; @@ -121,10 +133,14 @@ class _MyAppState extends State { @override void initState() { super.initState(); + final service = FlutterBackgroundService(); Future.delayed(const Duration(milliseconds: 0), () async { //Hive.initFlutter; await HiveStore.init(); + registerWxApi( + appId: "wxd930ea5d5a228f5f",universalLink:"https://your.univerallink.com/link/ " + ); }); final inbox = Telephony.instance.getInboxSms(); // JPush jPush=JPush(); diff --git a/lib/ui/home/content_page.dart b/lib/ui/home/content_page.dart index 9676032..df1d9d2 100644 --- a/lib/ui/home/content_page.dart +++ b/lib/ui/home/content_page.dart @@ -27,6 +27,8 @@ class _ContentPageState extends State { int _select = 0; List textList = ['欢迎你的来电', '祝您生活愉快', '感谢您的来电我们会尽快处理的', '自定义短信内容']; List textList1 = ['自定义短信内容']; + late String phoneNum; + late String callState; @override Widget build(BuildContext context) { return Scaffold( @@ -71,6 +73,10 @@ class _ContentPageState extends State { )); } else { bool? permissionsGranted = await telephony.requestPhonePermissions; + final Iterable result = await CallLog.query(); + phoneNum = result.first.number!; + + print(phoneNum); // print(permissionsGranted); // if(permissionsGranted!){ // print(content); @@ -89,20 +95,12 @@ class _ContentPageState extends State { // message: content, // isMultipart: true // ); - List recipents=["13395740386"]; + List recipents=[ + phoneNum + ]; _sendSMS(content,recipents); - // CallState state = await telephony.callState; - // print(state); - // DataState state1 = await telephony.cellularDataState; - // print(state1); - // String? operatorName = await telephony.networkOperatorName; - // print(operatorName); - // NetworkType type = await telephony.dataNetworkType; - // print(type); - // PhoneType type1 = await telephony.phoneType; - // print(type1); - String phoneNumber = await GetPhoneNumber().get(); - print('getPhoneNumber result: $phoneNumber'); + // String phoneNumber = await GetPhoneNumber().get(); + // print('getPhoneNumber result: $phoneNumber'); } setState(() {}); // print("这是数据" + textList[_s lect]); diff --git a/lib/ui/user/members_page.dart b/lib/ui/user/members_page.dart index 6edc9c1..17cbeb0 100644 --- a/lib/ui/user/members_page.dart +++ b/lib/ui/user/members_page.dart @@ -1,11 +1,16 @@ import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:project_telephony/base/base_style.dart'; +import 'package:project_telephony/ui/user/members_page.dart'; import 'package:project_telephony/ui/widget/check_radio.dart'; import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/ui/widget/plone_bottom.dart'; import 'package:project_telephony/ui/widget/putup_widget.dart'; import 'package:project_telephony/utils/headers.dart'; +import 'package:tobias/tobias.dart'; +import 'package:fluwx/fluwx.dart' as fluwx; +import '../../model/pay/wx_pay_model.dart'; +import '../../utils/pay_util.dart'; class MembersPage extends StatefulWidget { const MembersPage({Key? key}) : super(key: key); @@ -34,10 +39,11 @@ List payWay = [ }, {'payName': '支付宝支付', 'payUrl': Assets.icons.zhifubao.path} ]; -Map a = {}; class _MembersPageState extends State { @override + + Widget build(BuildContext context) { return Scaffold( body: Stack( @@ -69,7 +75,28 @@ class _MembersPageState extends State { PloneBottom( border: true, onTap: () async { - if (_selectIndex == 0) {} + if(_chooseItem == null){ + Get.snackbar('提示', "请先选择充值月份"); + }else{ + if (_selectIndex == 0) { + _wxPayFunc(); + }else{ + var result = await isAliPayInstalled(); // 这里判断是否安装支付宝 + if(!result){ + Get.snackbar('提示', "请先安装支付宝"); + }else{ + aliPay("paySign").then((payResult) { + // map["paySign"]是请求接口返回的字符串直接放进去就好了 + print("支付宝:" + payResult.toString()); + if (payResult['resultStatus'] == '9000') { + Get.snackbar('提示', "充值成功"); + } else { + Get.snackbar('提示', payResult['memo']); + } + }); + } + } + } }, textColor: const Color(0xFF333333), text: "立即开通", @@ -172,21 +199,61 @@ class _MembersPageState extends State { ); } - // Future _wxPayFunc() async { - // var base = await apiClient.request(API.user.wallet.assessRecharge, data: { - // 'count': widget.count, - // 'payType': 2, - // }); - // if (base.code == 0) { - // var wxPayModel = WxPayModel.fromJson(base.data['content']); - // await PayUtil().callWxPay( - // payModel: wxPayModel, - // ); + + Future _wxPayFunc() async{ + bool isInstalled=await fluwx.isWeChatInstalled; + if(!isInstalled){ + BotToast.showText(text: "请先安装微信"); + return ; + } + //调起支付 + fluwx.payWithWeChat( + appId: "wxd930ea5d5a228f5f", + partnerId: "partnerId", + prepayId: "prepayId", + packageValue: "packageValue", + nonceStr: "nonceStr", + timeStamp: 1597927308, + sign: "sign"); + fluwx.weChatResponseEventHandler.listen((event) { if(event.isSuccessful){ + BotToast.showText(text: "微信支付成功"); + }else{ + BotToast.showText(text: "微信支付失败"); + } + }); + // var wxPayModel = WxPayModel.fromJson({ + // "prepayId": "wx121434071826969924754d7d3309520000", + // "partnerId": "1622850618", + // "timeStamp": "1660286047", + // "nonceStr": "W14Z6RbKcHcI6QTETFyrxteD3m2P7ZaF", + // "package": "Sign=WXPay", + // "sign": "i4LDk+FlAfXukLPet6oFdtVkAXHv8aKkajO4i2tiXETBqudWJPzYAaziPH3eBo1yCvkMOyoVddWDKqHXhwrN2uvubz8YpSICt9yZBcndVaXOK+X9hY765sYoFV6sGHz5iuPljTRUWWrmc8GYMEs8TlLDB5Q50NenzJSChdfDtZRV4kXtVK6xY9b0y++eUo/snzpmq/X6GwS9n0auKkT0TKW1C30/Hzpw3SMziXPP02TvBvbqj57f6rHuGJS/LUX2ZwCR8iFZsfuiXo+7lyHHsimr4jVczdS6VtobeekrPq4vTe72d/HU/ECEZRSYxsL5DbyS2TvSNzFA6Z7wGDzkpQ==" + // }); + // await PayUtil().callWxPay( + // payModel: wxPayModel, + // ); + } + // base ={ + // "content": { + // "prepayId": "wx121434071826969924754d7d3309520000", + // "partnerId": "1622850618", + // "timeStamp": "1660286047", + // "nonceStr": "W14Z6RbKcHcI6QTETFyrxteD3m2P7ZaF", + // "package": "Sign=WXPay", + // "sign": "i4LDk+FlAfXukLPet6oFdtVkAXHv8aKkajO4i2tiXETBqudWJPzYAaziPH3eBo1yCvkMOyoVddWDKqHXhwrN2uvubz8YpSICt9yZBcndVaXOK+X9hY765sYoFV6sGHz5iuPljTRUWWrmc8GYMEs8TlLDB5Q50NenzJSChdfDtZRV4kXtVK6xY9b0y++eUo/snzpmq/X6GwS9n0auKkT0TKW1C30/Hzpw3SMziXPP02TvBvbqj57f6rHuGJS/LUX2ZwCR8iFZsfuiXo+7lyHHsimr4jVczdS6VtobeekrPq4vTe72d/HU/ECEZRSYxsL5DbyS2TvSNzFA6Z7wGDzkpQ==" + // } + // }; + // await apiClient.request(API.user.wallet.assessRecharge, data: { + // 'count': widget.count, + // 'payType': 2, + // }); + // if (base.code ==null) { + // // } else { // BotToast.showText(text: "${base.msg}"); // } // } - + // // Future _aliPayFunc() async { // var base = await apiClient.request(API.user.wallet.assessRecharge, data: { // 'count': widget.count, diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 39a6270..0042da0 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -129,6 +129,7 @@ class _UserPageState extends State { ), ) ], + ), ); } From c11c631229773aa5cc949b71bb06271c3ffba520 Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Sun, 14 Aug 2022 22:48:13 +0800 Subject: [PATCH 2/3] www --- lib/model/hive/ContentHive.dart | 27 +++++++++++ lib/model/hive/ContentHive.g.dart | 59 ++++++++++++++++++++++++ lib/model/hive/content_list_model.dart | 19 ++++++++ lib/model/hive/content_list_model.g.dart | 13 ++++++ lib/providers/content_provider.dart | 14 ++++++ lib/ui/home/content_page.dart | 17 +++---- 6 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 lib/model/hive/ContentHive.dart create mode 100644 lib/model/hive/ContentHive.g.dart create mode 100644 lib/model/hive/content_list_model.dart create mode 100644 lib/model/hive/content_list_model.g.dart create mode 100644 lib/providers/content_provider.dart diff --git a/lib/model/hive/ContentHive.dart b/lib/model/hive/ContentHive.dart new file mode 100644 index 0000000..0e3c3b4 --- /dev/null +++ b/lib/model/hive/ContentHive.dart @@ -0,0 +1,27 @@ +import 'package:hive/hive.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:equatable/equatable.dart'; + +import 'content_list_model.dart'; +part 'ContentHive.g.dart'; + + +@JsonSerializable() +@HiveType(typeId:2) +class ContentHive extends Equatable{ + @HiveField(0) + final int id; + @HiveField(1) + final String content; + @HiveField(2) + final List list; + factory ContentHive.fromJson(Map json) =>_$ContentHiveFromJson(json); + + const ContentHive({ + required this.id, + required this.content, + required this.list, + }); + @override + List get props => [id,content,list]; +} \ No newline at end of file diff --git a/lib/model/hive/ContentHive.g.dart b/lib/model/hive/ContentHive.g.dart new file mode 100644 index 0000000..6bca3b7 --- /dev/null +++ b/lib/model/hive/ContentHive.g.dart @@ -0,0 +1,59 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'ContentHive.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class ContentHiveAdapter extends TypeAdapter { + @override + final int typeId = 0; + + @override + ContentHive read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return ContentHive( + id: fields[0] as int, + content: fields[1] as String, + list: (fields[3] as List).cast(), + ); + } + + @override + void write(BinaryWriter writer, ContentHive obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.content) + ..writeByte(3) + ..write(obj.list); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is ContentHiveAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ContentHive _$ContentHiveFromJson(Map json) => ContentHive( + id: json['id'] as int, + content: json['content'] as String, + list: (json['list'] as List) + .map((e) => ContentListModel.fromJson(e as Map)) + .toList(), + ); diff --git a/lib/model/hive/content_list_model.dart b/lib/model/hive/content_list_model.dart new file mode 100644 index 0000000..c8ae6f2 --- /dev/null +++ b/lib/model/hive/content_list_model.dart @@ -0,0 +1,19 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:equatable/equatable.dart'; +part 'content_list_model.g.dart'; + + +@JsonSerializable() +class ContentListModel extends Equatable{ + final int index; + final String content; + factory ContentListModel.fromJson(Map json) =>_$ContentListModelFromJson(json); + + + const ContentListModel({ + required this.index, + required this.content, + }); + @override + List get props => [index,content]; +} \ No newline at end of file diff --git a/lib/model/hive/content_list_model.g.dart b/lib/model/hive/content_list_model.g.dart new file mode 100644 index 0000000..f512f2b --- /dev/null +++ b/lib/model/hive/content_list_model.g.dart @@ -0,0 +1,13 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'content_list_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ContentListModel _$ContentListModelFromJson(Map json) => + ContentListModel( + index: json['index'] as int, + content: json['content'] as String, + ); diff --git a/lib/providers/content_provider.dart b/lib/providers/content_provider.dart new file mode 100644 index 0000000..1170def --- /dev/null +++ b/lib/providers/content_provider.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:hive/hive.dart'; + +import '../model/hive/ContentHive.dart'; + +class ContentListModel extends ChangeNotifier{ + late Box _regionBox; + List _regions=[]; + List get regions=>_regions; + Future init() async{} + // _regionBox = await Hive.openBox("ContentListBox"); + // var + +} \ No newline at end of file diff --git a/lib/ui/home/content_page.dart b/lib/ui/home/content_page.dart index df1d9d2..f002857 100644 --- a/lib/ui/home/content_page.dart +++ b/lib/ui/home/content_page.dart @@ -1,9 +1,10 @@ - +import 'dart:io'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_sms/flutter_sms.dart'; import 'package:get_phone_number/get_phone_number.dart'; +import 'package:hive/hive.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/base/base_style.dart'; import 'package:project_telephony/ui/home/content_details_page.dart'; @@ -72,11 +73,7 @@ class _ContentPageState extends State { }, )); } else { - bool? permissionsGranted = await telephony.requestPhonePermissions; - final Iterable result = await CallLog.query(); - phoneNum = result.first.number!; - - print(phoneNum); + // bool? permissionsGranted = await telephony.requestPhonePermissions; // print(permissionsGranted); // if(permissionsGranted!){ // print(content); @@ -95,10 +92,10 @@ class _ContentPageState extends State { // message: content, // isMultipart: true // ); - List recipents=[ - phoneNum - ]; - _sendSMS(content,recipents); + // List recipents=[ + // phoneNum + // ]; + // _sendSMS(content,recipents); // String phoneNumber = await GetPhoneNumber().get(); // print('getPhoneNumber result: $phoneNumber'); } From af9fb50bd108eb23fdb26dbf5b8e118eacc3c80f Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Mon, 15 Aug 2022 14:59:39 +0800 Subject: [PATCH 3/3] www --- android/app/src/main/AndroidManifest.xml | 4 +- android/gradle.properties | 1 + lib/main.dart | 182 ++++++++++----------- lib/ui/home/content_page.dart | 4 + lib/ui/home/home_page.dart | 103 ++++++++++++ lib/ui/user/privacy_rights_page.dart | 192 +++++++---------------- lib/ui/user/user_page.dart | 46 +++--- pubspec.lock | 8 +- pubspec.yaml | 1 + 9 files changed, 291 insertions(+), 250 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 882a27b..8966d8b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,9 +31,11 @@ android:name="flutterEmbedding" android:value="2" /> + - + + diff --git a/android/gradle.properties b/android/gradle.properties index 94adc3a..a777f0e 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true +android.jetifier.blacklist=bcprov-jdk15on diff --git a/lib/main.dart b/lib/main.dart index 3de4cd3..d76307e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'dart:async'; + import 'package:bot_toast/bot_toast.dart'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; @@ -9,8 +10,9 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_sms/flutter_sms.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; import 'package:power_logger/power_logger.dart'; -import 'package:fluwx/fluwx.dart' as fluwx; import 'package:project_telephony/providers/user_provider.dart'; import 'package:project_telephony/ui/tab_navigator.dart'; @@ -18,15 +20,15 @@ import 'package:provider/provider.dart'; import 'package:telephony/telephony.dart'; import 'package:project_telephony/utils/hive_store.dart'; -void _sendSMS(String message, List recipients) async { - try{ - String result = - await sendSMS(message: message, recipients: recipients, sendDirect: true); - print(result); - } on PlatformException catch(e){ - print(e.toString()); - } -} +// void _sendSMS(String message, List recipients) async { +// try{ +// String result = +// await sendSMS(message: message, recipients: recipients, sendDirect: true); +// print(result); +// } on PlatformException catch(e){ +// print(e.toString()); +// } +// } void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -34,89 +36,89 @@ void main() async { LoggerData.addData(details); FlutterError.presentError(details); }; - await initializeService(); + // await initializeService(); WidgetsFlutterBinding.ensureInitialized(); runApp(const MyApp()); } -Future initializeService() async { - final service = FlutterBackgroundService(); - service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); - await service.configure( - androidConfiguration: AndroidConfiguration( - onStart: onStart, - autoStart: true, - isForegroundMode: true, - ), - iosConfiguration: IosConfiguration( - autoStart: true, - onForeground: onStart, - onBackground: onIosBackground, - ), - ); -} - -void onIosBackground() { - WidgetsFlutterBinding.ensureInitialized(); - // print('FLUTTER BACKGROUND FETCH'); -} - -void onStart() { - int flag = 0; - String phoneNum; - String callState; - WidgetsFlutterBinding.ensureInitialized(); - Timer.periodic(const Duration(seconds: 1), (timer) async { - CallState state = await Telephony.instance.callState; - callState = state.name; - // print(callState!+" $flag"); - if (callState == "IDLE") { - if (flag != 0) { - flag = 0; - // print("object"); - final Iterable result = await CallLog.query(); - // print(phoneNum); - // String message = "This is a test message!"; - // List recipents = ["10000", "10086"]; - // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) - // .catchError((onError) { - // print(onError); - // }); - // print(_result); - phoneNum = result.first.number!; - // List recipents=[ - // phoneNum - // ]; - if(phoneNum.isEmpty){ - print("At Least 1 Person or Message Required"); - }else{ - print("你好"+phoneNum); - _sendSMS("你好", [phoneNum]); - print("你好"+phoneNum); - } - // final SmsSendStatusListener listener = (SendStatus status) { - // print(status); - // }; - // Phone.telephony.sendSms( - // to: phoneNum!, - // message: "hello", - // statusListener: listener, - // isMultipart: true, - // - // ); - } - } else if (callState == "RINGING") { - flag++; - } else if (callState == "OFFHOOK") { - flag++; - } - }); -} - -class Phone { - static Telephony telephony = Telephony.instance; -} +// Future initializeService() async { +// final service = FlutterBackgroundService(); +// service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); +// await service.configure( +// androidConfiguration: AndroidConfiguration( +// onStart: onStart, +// autoStart: true, +// isForegroundMode: true, +// ), +// iosConfiguration: IosConfiguration( +// autoStart: true, +// onForeground: onStart, +// onBackground: onIosBackground, +// ), +// ); +// } + +// void onIosBackground() { +// WidgetsFlutterBinding.ensureInitialized(); +// // print('FLUTTER BACKGROUND FETCH'); +// } +// +// void onStart() { +// int flag = 0; +// String phoneNum; +// String callState; +// WidgetsFlutterBinding.ensureInitialized(); +// Timer.periodic(const Duration(seconds: 1), (timer) async { +// CallState state = await Telephony.instance.callState; +// callState = state.name; +// // print(callState!+" $flag"); +// if (callState == "IDLE") { +// if (flag != 0) { +// flag = 0; +// // print("object"); +// final Iterable result = await CallLog.query(); +// // print(phoneNum); +// // String message = "This is a test message!"; +// // List recipents = ["10000", "10086"]; +// // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) +// // .catchError((onError) { +// // print(onError); +// // }); +// // print(_result); +// phoneNum = result.first.number!; +// // List recipents=[ +// // phoneNum +// // ]; +// if(phoneNum.isEmpty){ +// print("At Least 1 Person or Message Required"); +// }else{ +// print("你好"+phoneNum); +// _sendSMS("你好", [phoneNum]); +// print("你好"+phoneNum); +// } +// // final SmsSendStatusListener listener = (SendStatus status) { +// // print(status); +// // }; +// // Phone.telephony.sendSms( +// // to: phoneNum!, +// // message: "hello", +// // statusListener: listener, +// // isMultipart: true, +// // +// // ); +// } +// } else if (callState == "RINGING") { +// flag++; +// } else if (callState == "OFFHOOK") { +// flag++; +// } +// }); +// } +// +// class Phone { +// static Telephony telephony = Telephony.instance; +// } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @@ -131,12 +133,16 @@ class _MyAppState extends State { // the one in background. final telephony = Telephony.instance; @override + Future _Getpermission() async{ + await [Permission.sms,Permission.phone,].request(); +} void initState() { super.initState(); final service = FlutterBackgroundService(); Future.delayed(const Duration(milliseconds: 0), () async { //Hive.initFlutter; + _Getpermission(); await HiveStore.init(); registerWxApi( appId: "wxd930ea5d5a228f5f",universalLink:"https://your.univerallink.com/link/ " diff --git a/lib/ui/home/content_page.dart b/lib/ui/home/content_page.dart index f002857..4e58334 100644 --- a/lib/ui/home/content_page.dart +++ b/lib/ui/home/content_page.dart @@ -1,7 +1,9 @@ +import 'dart:async'; import 'dart:io'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_sms/flutter_sms.dart'; import 'package:get_phone_number/get_phone_number.dart'; import 'package:hive/hive.dart'; @@ -24,6 +26,8 @@ class ContentPage extends StatefulWidget { _ContentPageState createState() => _ContentPageState(); } + + class _ContentPageState extends State { int _select = 0; List textList = ['欢迎你的来电', '祝您生活愉快', '感谢您的来电我们会尽快处理的', '自定义短信内容']; diff --git a/lib/ui/home/home_page.dart b/lib/ui/home/home_page.dart index 6e8945d..6999823 100644 --- a/lib/ui/home/home_page.dart +++ b/lib/ui/home/home_page.dart @@ -1,6 +1,13 @@ +import 'dart:async'; + +import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; +import 'package:flutter_sms/flutter_sms.dart'; import 'package:project_telephony/ui/home/content_page.dart'; import 'package:project_telephony/utils/headers.dart'; +import 'package:telephony/telephony.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @@ -8,8 +15,104 @@ class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } +void _sendSMS(String message, List recipients) async { + try{ + String result = + await sendSMS(message: message, recipients: recipients, sendDirect: true); + print(result); + } on PlatformException catch(e){ + print(e.toString()); + } +} +Future initializeService() async { + final service = FlutterBackgroundService(); + service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); + await service.configure( + androidConfiguration: AndroidConfiguration( + onStart: onStart, + autoStart: true, + isForegroundMode: true, + ), + iosConfiguration: IosConfiguration( + autoStart: true, + onForeground: onStart, + onBackground: onIosBackground, + ), + ); +} + +void onIosBackground() { + WidgetsFlutterBinding.ensureInitialized(); + // print('FLUTTER BACKGROUND FETCH'); +} + +void onStart() { + int flag = 0; + String phoneNum; + String callState; + WidgetsFlutterBinding.ensureInitialized(); + Timer.periodic(const Duration(seconds: 1), (timer) async { + CallState state = await Telephony.instance.callState; + callState = state.name; + // print(callState!+" $flag"); + if (callState == "IDLE") { + if (flag != 0) { + flag = 0; + // print("object"); + final Iterable result = await CallLog.query(); + // print(phoneNum); + // String message = "This is a test message!"; + // List recipents = ["10000", "10086"]; + // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) + // .catchError((onError) { + // print(onError); + // }); + // print(_result); + phoneNum = result.first.number!; + // List recipents=[ + // phoneNum + // ]; + if(phoneNum.isEmpty){ + print("At Least 1 Person or Message Required"); + }else{ + print("你好"+phoneNum); + _sendSMS("你好", [phoneNum]); + print("你好"+phoneNum); + } + // final SmsSendStatusListener listener = (SendStatus status) { + // print(status); + // }; + // Phone.telephony.sendSms( + // to: phoneNum!, + // message: "hello", + // statusListener: listener, + // isMultipart: true, + // + // ); + } + } else if (callState == "RINGING") { + flag++; + } else if (callState == "OFFHOOK") { + flag++; + } + }); +} + +class Phone { + static Telephony telephony = Telephony.instance; +} class _HomePageState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + Future.delayed(const Duration(milliseconds: 0), () async { + //Hive.initFlutter; + await initializeService(); + + }); + } @override Widget build(BuildContext context) { return Scaffold( diff --git a/lib/ui/user/privacy_rights_page.dart b/lib/ui/user/privacy_rights_page.dart index cceb690..99f9dd8 100644 --- a/lib/ui/user/privacy_rights_page.dart +++ b/lib/ui/user/privacy_rights_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; import 'package:project_telephony/base/base_style.dart'; import 'package:project_telephony/ui/widget/plone_back_button.dart'; @@ -22,27 +23,29 @@ final Telephony telephony = Telephony.instance; // initPlatformState(); // } class _PrivacyRightsPageState extends State { - final Permission _permission = Permission.phone; - final PermissionHandlerPlatform _permissionHandler = - PermissionHandlerPlatform.instance; - PermissionStatus _permissionStatus = PermissionStatus.denied; - - Future requestPermission(Permission permission) async { - final status = await _permissionHandler.requestPermissions([permission]); - setState(() { - _permissionStatus = status[permission] ?? PermissionStatus.denied; - }); - } - + // final Permission _permission = ; + // final PermissionHandlerPlatform _permissionHandler = + // PermissionHandlerPlatform.instance; + // PermissionStatus _permissionStatus = Permission.phone.request() as PermissionStatus; + // PermissionStatus _permissionStatus2 = Permission.sms.request() as PermissionStatus; + + // Future requestPermission(Permission permission) async { + // final status = await _permissionHandler.requestPermissions([permission]); + // setState(() { + // _permissionStatus = status[permission] ?? PermissionStatus.denied; + // }); + // } +bool sms=false; +bool plone=false; @override void initState() { super.initState(); _listenForPermissionStatus(); } - void _listenForPermissionStatus() async { - final status = await _permissionHandler.checkPermissionStatus(_permission); - setState(() => _permissionStatus = status); + Future _listenForPermissionStatus() async { + sms=await Permission.sms.request().isGranted; + plone =await Permission.phone.request().isGranted; } @override @@ -61,144 +64,55 @@ class _PrivacyRightsPageState extends State { leading: const CloudBackButton(isSpecial: true), backgroundColor: kForeGroundColor), backgroundColor: Colors.white, - body: widget.name == "隐私政策" ? null : _getRights(true), + body: widget.name == "隐私政策" ? null : _getRights(), ); } - - // onMessage(SmsMessage message) async { - // setState(() { - // body = message.body ?? "error reading message body."; - // print(body); - // }); - // } - // - // onSendStatus(SendStatus status) { - // setState(() { - // body = status == SendStatus.SENT ? "sent" : "delivered"; - // }); - // } - // - // Future initPlatformState() async { - // final bool? result = await telephony.requestPhoneAndSmsPermissions; - // if (result != null && result) { - // telephony.listenIncomingSms( - // onNewMessage: onMessage, - // onBackgroundMessage: onBackgroundMessage, - // listenInBackground: true); + // Color getPermissionColor() { + // if(true){ + // return Colors.red; + // }else{ + // return Colors.green; // } - // if (!mounted) return; // } - _getRights(bool pd) { - return ListView( - children: Permission.values - .where((permission) { - return permission == Permission.phone || - permission == Permission.sms; - }) - .map((permission) => PermissionWidget(permission)) - .toList()); - } -} - -class PermissionWidget extends StatefulWidget { - const PermissionWidget(this._permission); - - final Permission _permission; - - @override - _PermissionState createState() => _PermissionState(_permission); -} - -class _PermissionState extends State { - _PermissionState(this._permission); - - final Permission _permission; - final PermissionHandlerPlatform _permissionHandler = - PermissionHandlerPlatform.instance; - PermissionStatus _permissionStatus = PermissionStatus.denied; - List title = [ - "获取来电权限", - "获取短信权限", - ]; - List sub = [ - "用于监听来电状态", - "用于发送短信", - ]; - - @override - void initState() { - super.initState(); - - _listenForPermissionStatus(); - } - - void _listenForPermissionStatus() async { - final status = await _permissionHandler.checkPermissionStatus(_permission); - setState(() => _permissionStatus = status); - } - - Color getPermissionColor() { - switch (_permissionStatus) { - case PermissionStatus.denied: - return Colors.red; - case PermissionStatus.granted: - return Colors.green; - case PermissionStatus.limited: - return Colors.orange; - default: - return Colors.red; - } - } - String getPermissionStu() { - switch (_permissionStatus) { - case PermissionStatus.denied: - return "未允许"; - case PermissionStatus.granted: - return "已允许"; - default: - return "未允许"; - } - } - - @override - Widget build(BuildContext context) { - return ListTile( + // String getPermissionStu() { + // if (false) { + // return "未允许"; + // } else { + // return "已允许"; + // } + // } + _getRights(){ + return ListTile( + onTap: ()async{ + // await Permission.phone.request(); + // await Permission.sms.request(); + // Map statuses = await [ + // Permission.sms, + // Permission.phone, + // ].request(); + // + // openAppSettings(); + print(await Permission.phone.request().isGranted); + print(await Permission.sms.request().isGranted); + }, title: Text( - _permission.value==8?title[0]:title[1], + '获取设备来电', style: Theme.of(context).textTheme.titleMedium, ), - subtitle: Text( - _permission.value==8?sub[0]:sub[1], + subtitle: const Text( + "获取设备", ), trailing: Wrap( children: [ - Text(getPermissionStu(), - style: TextStyle(color: getPermissionColor())), + Text(sms & plone ?"已允许":"未允许", + style: TextStyle(color: sms & plone ?Colors.green:Colors.red)), const Icon(Icons.arrow_forward_ios), ], ), - onTap: () { - requestPermission(_permission); - }, - ); - } - void checkServiceStatus( - BuildContext context, PermissionWithService permission) async { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - (await _permissionHandler.checkServiceStatus(permission)).toString()), - )); - } + ); +} - Future requestPermission(Permission permission) async { - final status = await _permissionHandler.requestPermissions([permission]); - setState(() { - print(status); - _permissionStatus = status[permission] ?? PermissionStatus.denied; - print(_permissionStatus); - }); - } -} \ No newline at end of file +} diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 0042da0..9d85e50 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -22,6 +22,7 @@ import '../../permission.dart'; import '../../providers/user_provider.dart'; import '../../utils/toast/cloud_toast.dart'; import '../../utils/user_tool.dart'; +import '../home/content_details_page.dart'; import '../home/home_page.dart'; class UserPage extends StatefulWidget { @@ -34,7 +35,7 @@ class UserPage extends StatefulWidget { final Telephony telephony = Telephony.instance; class _UserPageState extends State { - bool vle = false; + bool vle =PermissionStatus.denied.isGranted; final userProvider = Provider.of(Get.context!, listen: false); @override @@ -165,6 +166,7 @@ class _UserPageState extends State { _getBotton() { return GestureDetector( onTap: () { + // print(vle); Get.to(() => const MembersPage()); }, child: Container( @@ -236,7 +238,14 @@ class _UserPageState extends State { onTap: () async { pd ? "" - : Get.to(() => PrivacyRightsPage( + : name=="短信标签"?Get.to(()=> ContentDetailsPage( + content: "", + ploneBack: (String textContent) { + // print("这是数据" + textContent); + // textList.setAll(index, {textContent}); + }, + )): + Get.to(() => PrivacyRightsPage( name: name, )); }, @@ -260,22 +269,23 @@ class _UserPageState extends State { trailing: pd ? Switch( value: vle, - onChanged: (value) { - List permissions = [ - Permission.sms, - Permission.phone, - ]; - PermissionHelper.check(permissions, onSuccess: () { - print('onSuccess'); - }, onFailed: () { - print('onFailed'); - }, onOpenSetting: () { - print('onOpenSetting'); - openAppSettings(); - }); - setState(() { - vle = value; - }); + onChanged: (value) async{ + await Permission.phone.request(); + // List permissions = [ + // Permission.sms, + // Permission.phone, + // ]; + // PermissionHelper.check(permissions, onSuccess: () { + // print('onSuccess'); + // }, onFailed: () { + // print('onFailed'); + // }, onOpenSetting: () { + // print('onOpenSetting'); + // openAppSettings(); + // }); + // setState(() { + // vle = value; + // }); }) : const Icon(Icons.keyboard_arrow_right)), ), diff --git a/pubspec.lock b/pubspec.lock index 72fa926..d566820 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,14 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "44.0.0" + version: "46.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.6.0" archive: dependency: transitive description: @@ -259,7 +259,7 @@ packages: name: device_info_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.3.0+1" + version: "2.6.1" device_info_plus_web: dependency: transitive description: @@ -743,7 +743,7 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.17" + version: "2.0.19" path_provider_ios: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index aa6d7c1..d1b35a6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -97,6 +97,7 @@ dev_dependencies: #导入包整理 import_sorter: ^4.5.1 hive_generator: ^1.1.0 + #model自动生成 json_serializable: ^6.1.3 build_runner: ^2.0.2