From 5cdb5e7ff9c9c249af8881c807df3fe9ed15de29 Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Wed, 31 Aug 2022 11:33:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/providers/user_provider.dart | 4 ++-- lib/ui/home/home_page.dart | 5 ++-- lib/ui/login/login_page.dart | 2 +- lib/ui/user/members_page.dart | 15 ++++++------ lib/ui/user/user_page.dart | 35 ++++++++++++++++++++++++++++ lib/ui/widget/plone_back_button.dart | 6 ++++- 6 files changed, 54 insertions(+), 13 deletions(-) diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index 8af5941..1dde2a9 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -80,7 +80,7 @@ class UserProvider extends ChangeNotifier { if (base.code == 0) { await prefs.remove('conSms'); await prefs.setString('conSms', (UserTool.userProvider.userInfo.tag)==""?"${base - .data['content']}":"[${UserTool.userProvider.userInfo.tag}]${base + .data['content']}":"【${UserTool.userProvider.userInfo.tag}】${base .data['content']}"); service.invoke("stopService"); if(prefs.getBool('kg')!){ @@ -102,7 +102,7 @@ class UserProvider extends ChangeNotifier { if (base.code == 0) { await prefs.remove('refSms'); await prefs.setString('refSms', (UserTool.userProvider.userInfo.tag)==""?"${base - .data['content']}":"[${UserTool.userProvider.userInfo.tag}]${base + .data['content']}":"【${UserTool.userProvider.userInfo.tag}】${base .data['content']}" ); service.invoke("stopService"); if(prefs.getBool('kg')!){ diff --git a/lib/ui/home/home_page.dart b/lib/ui/home/home_page.dart index e453f8f..0e9c1f7 100644 --- a/lib/ui/home/home_page.dart +++ b/lib/ui/home/home_page.dart @@ -114,10 +114,11 @@ class _HomePageState extends State with WidgetsBindingObserver { onTap: () { if(!(sms && plone && callLog && kg)){ if(!(sms && plone && callLog )){ - BotToast.showText(text: '功能开关未开启'); + Get.to(()=>const PrivacyRightsPage(name: "权限说明")); // Get.to(()=>const TabNavigator(index: 1,)); }else{ - Get.to(()=>const PrivacyRightsPage(name: "权限说明")); + BotToast.showText(text: '功能开关未开启'); + } } // print(); diff --git a/lib/ui/login/login_page.dart b/lib/ui/login/login_page.dart index 9108997..0029904 100644 --- a/lib/ui/login/login_page.dart +++ b/lib/ui/login/login_page.dart @@ -355,7 +355,7 @@ class _LoginPageState extends State { TextSpan( text: '《短信帮手隐私协议》', style: TextStyle(color: kPrimaryColor, fontSize: 12 * 2.sp), - recognizer: _recognizer(context, 1)), + recognizer: _recognizer(context, 2)), ])) ], ), diff --git a/lib/ui/user/members_page.dart b/lib/ui/user/members_page.dart index 11312d9..5a308f1 100644 --- a/lib/ui/user/members_page.dart +++ b/lib/ui/user/members_page.dart @@ -74,6 +74,7 @@ class _MembersPageState extends State { } void _paySuccess() { _easyRefreshController.callRefresh(); + // Get.offAll(const TabNavigator(index: 1,)); } @override Widget build(BuildContext context) { @@ -121,15 +122,15 @@ class _MembersPageState extends State { Get.snackbar('提示', "请先选择充值月份"); } else { if (_selectIndex == 0) { - print("这是数据${_piceList[_selectIndex].pice}"); - _wxPayFunc(_piceList[_selectIndex].pice); + // print("这是数据${_chooseItem?.pice}"); + _wxPayFunc(_chooseItem?.pice); } else { var result = await isAliPayInstalled(); // 这里判断是否安装支付宝 if (!result) { Get.snackbar('提示', "请先安装支付宝"); } else { - _aliPay(); + _aliPay(_chooseItem?.pice); // aliPay("paySign").then((payResult) { // // map["paySign"]是请求接口返回的字符串直接放进去就好了 // print("支付宝:$payResult"); @@ -249,14 +250,14 @@ class _MembersPageState extends State { ); } - Future _wxPayFunc(double pay) async { + Future _wxPayFunc(double? pay) async { bool isInstalled = await fluwx.isWeChatInstalled; if (!isInstalled) { BotToast.showText(text: "请先安装微信"); return; } //调起支付 - _wxPay(pay); + _wxPay(pay!); // var wxPayModel = WxPayModel.fromJson({ // "prepayId": "wx121434071826969924754d7d3309520000", // "partnerId": "1622850618", @@ -291,9 +292,9 @@ class _MembersPageState extends State { // } // } // - Future _aliPay() async { + Future _aliPay(double? pay) async { var base = await apiClient.request(API.pay.alipay, data: { - 'amount': nowPrice,//注释 + 'amount': pay,//注释 // 'amount': 0.01, }); if (base.code == 0) { diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 4a72bad..6f30052 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -63,6 +63,23 @@ class _UserPageState extends State { super.initState(); // _easyRefreshController.callRefresh(); // UserTool.userProvider.updateUserInfo(); + // if (UserTool.userProvider.isLogin) { + // // print(UserTool.userProvider.userInfo.end * 1000); + // // print(DateTime.now().millisecondsSinceEpoch); + // if (UserTool.userProvider.userInfo.isVip != 1) { + // isVip = false; + // vle = false; + // } else { + // isVip = true; + // vle = await service.isRunning(); + // } + // //service.isRunning() as bool; + // // endDate = DateUtil.formatDateMs( + // // UserTool.userProvider.userInfo.end * 1000, + // // format: DateFormats.y_mo_d); + // } else { + // vle = false; + // } } @@ -84,6 +101,7 @@ class _UserPageState extends State { header: MaterialHeader(), onRefresh: () async { // _load(); + _getRequests(); // await UserTool.userProvider.updateUserInfo(); if (UserTool.userProvider.isLogin) { // print(UserTool.userProvider.userInfo.end * 1000); @@ -237,6 +255,23 @@ class _UserPageState extends State { UserTool.userProvider.userInfo.end * 1000, format: DateFormats.y_mo_d); UserTool.userProvider.updateUserInfo(); + if (UserTool.userProvider.isLogin) { + // print(UserTool.userProvider.userInfo.end * 1000); + // print(DateTime.now().millisecondsSinceEpoch); + if (UserTool.userProvider.userInfo.isVip != 1) { + isVip = false; + vle = false; + } else { + isVip = true; + vle = await service.isRunning(); + } + //service.isRunning() as bool; + // endDate = DateUtil.formatDateMs( + // UserTool.userProvider.userInfo.end * 1000, + // format: DateFormats.y_mo_d); + } else { + vle = false; + } setState(() {}); } diff --git a/lib/ui/widget/plone_back_button.dart b/lib/ui/widget/plone_back_button.dart index 5773d4b..9cbb82f 100644 --- a/lib/ui/widget/plone_back_button.dart +++ b/lib/ui/widget/plone_back_button.dart @@ -18,7 +18,11 @@ class CloudBackButton extends StatelessWidget { ? Padding( padding: isSpecial ? EdgeInsets.only(left: 8.w) : EdgeInsets.zero, child: IconButton( - onPressed: () => Navigator.pop(context,true), + onPressed: () { + print("返回传值"); + Navigator.pop(context,true); + + }, icon: Icon( CupertinoIcons.chevron_back, color: color, From b2effe383b349fa21a6850ef3a5c9b2ff52623ff Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Fri, 2 Sep 2022 17:29:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/emptylist.png | Bin 0 -> 10086 bytes lib/gen/assets.gen.dart | 30 ++- lib/main.dart | 19 +- lib/ui/home/answer_idle.dart | 272 +++++++++++++++++++++++++ lib/ui/home/calling_idle_list.dart | 275 +++++++++++++++++++++++++ lib/ui/home/content_connect_page.dart | 283 +++++++++----------------- lib/ui/home/content_refuse_page.dart | 274 ++++++++----------------- lib/ui/home/home_page.dart | 4 +- lib/ui/loading.dart | 2 +- lib/ui/user/privacy_rights_page.dart | 5 +- pubspec.lock | 7 + pubspec.yaml | 3 +- 12 files changed, 760 insertions(+), 414 deletions(-) create mode 100644 assets/images/emptylist.png create mode 100644 lib/ui/home/answer_idle.dart create mode 100644 lib/ui/home/calling_idle_list.dart diff --git a/assets/images/emptylist.png b/assets/images/emptylist.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8c551f0b109fe51a417695832372d8199dfb1a GIT binary patch literal 10086 zcmX|nby$;c*fx#sLvb-6ZKv4uC@_%dGx;<#Eu9OhzNGwa)qF&laj6Z~IQmiE2YVfHC>Y?;DHv&woxf zQ1=ZBDPi}f*Nf8s?8n4<3XLiox)%+n!+OQy?THJ5M7|dlS;Pbsh@>+-i`Sw{S4@?K zPM=JAdQCb0i)dbg{rM)k{%);e_qgih>%rH9gM+)tKTX}Ub!$^sYerW+cPE`GnWduy z)=*amhd(l%t5WtnxOEpWtrddVW%^uAqlZ?4wnRd zBOZVp0)S>=YAUvj>>?wYPRPCau2yNU9a>=$0I&(kh;^~uUH;7a&Dq`kZ-5C-+I@zi z45$G8$+C_N^)NYv)7s!^_1v3rs_%0rU)@ismrnOO~-EO7l4UYj=aks1UFd!qq@ zezB~(VqowWE34jO!em>uSiOI5f$>Hzo|JQHkl8pso?qf^v;Te&tA5!t80Gp z%lWOY@z00grxn)t;5e97lbxrUfshKtlfLGheo~?xph0&3nnnI4Pkhi4vMa?~tT2FI zg2eJUh{4~>nBtQX&CR>)JS)>*;Q*4D-P)Feq`=)Vun<0M;#87S3_rysC`?Ry z7sF51Ce<(ZZ$fO((6|v$_N*mP@aG#LKoa9wgYC$qxs_F~8r#JZV*=mY_G+h(>(`&@ z@$zU++at6gfw}%K>{BV1jxWV`_x4hVjgarN=U4%*&R7qa{7+x>4g?lb!|Ul@gE%WC zfb~+CX))y8G)yJ<)ipIiI<3X$De|_Um1FM^Ew+n0)k!kCqaw+G$o88(wOSV0?X8g% z{EQ!{h+Lxp_J@oa^e0LSTmXmr0no=F=%amY!w?185Q%|bBR_RIxq_DIE28OQ@U+vN4?S#YC z^h(CFPx3LOmq)*mywJz;*S@l*sYcbK7X^WI+$y+yorK_rE7Su$ZHn#{G?`D)%#|Cw zQAX6XoV2J_Cck(!w==6Hu6gNx$ln{?3OxAtIYlb3)bMH}|FzTBMuey!&=M8U^T@8M zxcv!{1A8AFLNd6W>TC>J^?d3N?}0Q$=p(l-ad!|Zs2lzqn%r;|JqKLfJ8on4)*k_TH79YG=^YsDPKR(N?X|_LSVo zmdc@-u&X`T$SEi)ax@44GbL`S5R6(ar?{)R<+em|K5(ywdh~lp$a7?tGZNyF8Zf zyM<}A(7TaGi=6uq@fU+>v5$_!yEO43{25K$^5qRQm~qZV8VvsAX$H-3t5F?u+eUbJ zA1aI33kwN7X2yD7OAds*9A-B;6@vC8&4a5GAS;d9BD}~ri%#zcq*gidcLRIwKn#l( z!lmublwm+h1DQLtgpk4$*A-heHv!GKtC+G+_7rLRl%FbA45Mth+$qmh7LLM0!-Rn!4- z@|*e&b+3DQt%NIqO6m}P+wyUa!2IvegaFqL<>2|tdcugT)Vg;-^Jp&L_bsM1WCGL2 zjh=ulYdK=Yw#A-_Mg#qSb6MxOfLbnQbHfwAwJ1$-G+p*EcgFhl)2FhauPOxsk?-wZ zAv`Yo*uJ1%W;`>sB4<|Ls>@Z7TIJYQ1jd!hwU9a?a8wDcXEwR-{1iVNVPUsmVQ^Ch zCQlO(5)zUk@|o-Fk1UtiVcT3bpWmPKl{_m9-cD0KLMP~QTBtQTS?}!yhi$9V^Vk?G z>Ut_m;Nsyi7Pt?;^!WO2Sk=Jm%02$iMhxwmJ8@bp&AG&>pJr@>fk;?eiSil*>tn=r z7J-O?wpArQ2qD4C*pPJ+SF-OnOLN@l2Jq=zm5!A6qvC83!AWCIk{Q^Dk$xVIu+seI zyftUV8V2?(jFlovS;k$5ia4nd0-2N00>5nWwzh6+^?KyJvLIEmHuq@^xH@^F?B#u? zD^P!ug?^J!^i5BiAXFFU5W=x!_w;v!_DOlxKS><|#2Y-rxwKGhJR#Yfd+}_+pWKJn zp~lLzt@Vq8Ha&2dD@>R8SR{n)a82M$y-1Y~VTvD6boIrdi^TmsU@LfyHNK}ZbE#*O z2o6=TQVo}}0EZe-%!p(gN=^k_Hm_<+2!-Y3k5;YsmDEqM%ME8veKKOTN zT$qcKQ-nLd&PjTh;S6q290EQqsF?Jkc67)=9UMM0rJZ3QCLD%OE7euL>Jp;P=9T>n zQ;%%MD4mXn3ncU0tl`V4m6cTpygvd!tf3>fMJ&#$XL(&g zsT(R|PHUBau+Q788qbLD>$W_NW{tOe<+RQoqjZqR2)Hy|M0RQ4^`w{yI%O#l`g(a? z91*c-1uC<(j5V8cPPI@BP7GU%;07_3fs zmAH7XTAz(YI#!(1I$Ss3*=xz=g$n14h+m?))Qo~>9Q-z8C-MEIo-+6v3hntt%)ye} zh;IImNOk*r-tqO{t>=2LUYn%RZbi%B)b`!VZEn1JTddDeV%7{_p43oGafP1~Vy~QD zO;MxDCU@{VS-G9JQEiL&I{D6oc~$ZC#(4lqdHm=*l`(Y9}38J4XZ993bppu zbbXEf1~B{=H_|c+y$}j|mka~kkux!b1d*^Iq}RjCOK{edl+f>Vt(&D1A-DPV=$MNM z`iK}97;x1JR$^@f;|Oy^LVQ_iUSqX!AhI!3Gi3V=3uW7}Xng62{4~et!(?sD@^Io- zZ4;KM+^Xa`SL<4&u!O}mph6NRRd4=tQ3hxa*IIkI|5-nl z@It3wMyiOU2M_ewsV_qbnNy9cww0QwXyJbm@TALjA@ru~S~3SccuCLs4^AA~yx$5V zqgKktLFwB;ly^Gb5{~}#BMkc_g~COHHK~Mh$?y`0d^A-cU$0MUG>9`vhMaFxVFVr&n#-_vof!2Qjd&Nw{4~9 zw^ExA1qujMN6~|d7UB6H7azX^iprbY{}K>YE*$Q#LHGIPHm6gU7Bc*cu7cOE)&*~W zo_n-2o;^W!LpTpU_=VY=O^B7PJD4wxJEwsDeEW(C_(?@(*Iy6%-2ZgU+z7D#*@ z5ie5%;KaqGbOg!8!9v_2kd3X3JT~$Fkf(H6=8{x1?t=LBFEw`Bu(4W9A@z~vmOOzAh?@cM{82)WJOzD9=Pz-}f#)$V=mA=+aFMHNH6 zip`bE;)ZwZek}YJQQ^*Uc;yV>=HeTy#D?zbRRP`Qc~)I`?IMTBMZbNgdmqq4x*MPdAJX20)5 z3-EvcEs9r1)NzyrFA}qa9X3A87ZS>%=fFecPcYXx>G`(xQEDK zvtHF2>JkHqRfn`r;f&r2ukw`Azh)NE!t3{s>&J>K7sQS${uN$5tLkKWI2-q_`@nsb z@xN9hS?}QW8&OPbJgW3`FnJmKh$;?#5i=8g!; zxapxilnK#(69?<&!3D3$a{eOCQ{5JfSP;e$ioSXp=0w%^)L&*_s(7P`jR*cdHC$+5V$dnhf|ODON}X5Gmavy6KLdgDa1a`xR+^=4Haymsm_iNH- zULfL$m8;^fR9$FWyuu=y_A)&bCXF!vrdP3i{FtS8P_B7t;<@Q&@jFhCTc1&Niyo~8 zy51AC9EJD}Vq1yaZs-3~hbrVS_B%}MdlG1HSfwX?VBfk1YITk=|07l($H=sdasl8;r9RXI%c2<{)ZqwWIK|{PlQcJA^pB3Oku6S!6mU zf=P%BW0_dzg;yj6 z-y>wEtd9ndl`@-rqQ;`2!3jq+6IyF<5(1S38nb^wT)T{Z=YBnCEaNucbVC-DZh}Lt zo_PytIOYjwdrjZcfx<1mf6g^$0Cl|@FrCGIPg%AYwjl&-4rMj|Wp6(A!icMHY@7l4 z^qf1uYB86s?Gh#G#f0bUx=3SQLS+HV_CY(%x?*}?ChYFSrT~7^Bc@a=1sH(k1AaVC zfgKG;)AXz~{Ja-GD5dMAIkpw04?RBiPO~>VcZDyZx2dAM%z6O-)%)b`-NLLKTQ0c+ z0gM0cHD}%sV`GyB&~Zy#ZrTSX8F*)(VAm?@bbcXPG%ThMvUf<|DX+ZyY0?=6ArJO8 zHW|t`Lmfz{`h5nrL{dQSu-W*1f)v8`1nSX#N-{A$bpDH3Wv$&6$*E?EuEPcB6o&P+ z9==_5G2~e`Ggg*+qw?(;?_`Cl=tq#Bc5vNqqbd}I*MvtUqH{dYuF331T{D&X1;mX$ zRg`_1+w8n&wRG-Xd3=?I40^V?A<~llBa0OQBMw-gR!fB7qG~?)u?d;^JlsEwD8TlSn}ybK$o=45R91 zO0Q7CQa|cZ9N8Q`=k>B8KGXEl0}cMKBxU~-EnPjAUqYt21B)Fzux}vMd%)6LL!phM z?D5yt17+;H)D~_Nq;Ps)t32>EJI8sri;8artTrHXL^mq~bLs@Y`p+-+c(qx7f^`Bi z+kB-Zo0Ux(munZx9_R#)#zY?Z`qrUcQ?wTHoU!CiVye^e>G5F!JZ-9LYnL;t0$3)* ziMc{nOIm!4(5RnW5~j%Oe=QGKB)wqB0iyP#B}aH1>%QfqaUthk$lamOHhHtPuFFz~ z!XtVI7N&=Kfu)qHh(=svRrqg)dAo&3kJT;xAsF;-lHpa*LAB79Vj@=ogj6D!i&sqYfd^b)I+pP zy2IajPmy%b^>-lZ^hXw38O=ngZ70oB8#{mrItM>_h4$a~j_X%-i?>Cs`$K_Auj-xq z!t+S*C9<)27bw6x`hVsS=>t3~i+C5GZ*x4e+a@7a4R}$nv}X7~rBU9Q@MULWrLD*0 z%S}c8AuV?-{$76+n)}u6C79f&7+}p*10GqW80B~KUf027L0Mp&Uz3X-dzMio$8?km)RmRiwCDXX} zzL$H|6WH zmQ?DVsn_w%(KSlo#Wi%TfT(zmT_Wb-Ldo<40q}@(!d85`=8O=m3$qDGxTP~xHS?ZV zFut$#dEqW8rbLtLdJpv>2mNV#rpA*5GY^&XW*%S|xLtGj=yJPOHiqp*k-j*SZKy4} zleu?-BBd*uls|)T+uw8iL#aNyx=p3qORw`Te-QooGO_&uGGMd0L}N(j`Ucm~LDzf5 z6STET-E(TiGk)CY4s5+r;T4s!$)PMd#C@N2lIDQbR(XS1vAz=$hE%bh`gRt+v(87G_dm=L4 z!ENm6op#$GQXsDnlk`KURiMRt8-8s^hAGGH*MD&4{R~?ZXOcU|lzut3tgZaLr~%(nCZE6y{~UdPR*lLfi0Ruz=H`VK?HukYwUMX!OA z2^A7K*w1oq&9{Ndw(r@p=K8uAC*{@{T5$fo+Q7J=YB!1pP707PeV_rpXL;bG5++RE z7R}Gk8Z!A|2G>@^jen^ z+ruQSGvfdCP(-=XFqCK*jYEwrOp+jcDN+D4VLV$YC%U0- zx`;FR+Si{6kD|CHv?PEOLCKvBUC^Q}HjLG1Gqi&$N}<32`cj{&Fv zI>e~$0wkberqQWadD`PlVvirnVBo$zaEt9Q0~Oejs;rHJ7GGy(Fz`@Fy^dp1T>}DW z2?6#+>E|+}z@wTJhQj-%=E3a=^-a|bvSS~rC1WsP4~B8B;Rqzi5HE_q4AWXoH6E5= zd_8-^=uAr`HO&&)=P;cS*g;Ui5e6|=&p)6Gnl_|&TLNbUM$yx;dqQ;LpIcC6>gkyR zhhnoxE2nR$Tq@T|Nc;s{(rs~pZz&yc&#INFfj#OVbE+P_bo6KL+pI38i^){&9*Y0> zQ<#HCnF110uePNnianU!uJ`;qyRr-(KQUGZ6_gcEosEqN;8DQCq{G(u(|v%LPBq&G zoQnSNeS;0_HepatZ8S7Aa_%RZp`0OhCBIa(o}3ntvBE+NVUwb&)A^S-lhA{K4r2EK zKo+1eFq)k5DKnMm8TL^TQG3mZdD!am@g@Gm)YST`yS^<5hjzJwOs%0RcIK;m^O|&8 zalb}7;I>E8z0Bwi^rj($1xHS%mTUs6)SNpHU)b*}5V#$Fdh~G=WBoU828)_pUqkkC z7l@L~hAa(nfnl&}{x6B{ynVQN-jPK2Ue!)UEZlnWv!a|dfsl`jOKs|{`4tV(G?VF} zcHVPV+`$*nwUdpt?f{%h^XFjTd!V)E_rG%TJolDLAAK@Y1~ISo(|&OW#`}X|LgJ;T zK|QC%>IxCg|B>i1nR@oQ(sT4sU6POL)F=jwDT?J~r3W7?r7piL8X6Yyf3pCIwexoT z?^;Y$zr(rRB0}9al}E>%(lzb}Ta6FKR9nYdtpNygKv_f_9aSf1L?s zGJ-PWLYIf!mfZZ!=GZS5_ z`8Klb)e+7eaV;v@R~>3j50j-Hv9M(bIYZ!M>tc;O@hvBHPSJHgX|h4Y^xp*Gj7bIkG0Cx zZ|u7VKO~z(+3P4!lmZ&1 za}BVxX2T*RJEqcYn+}`B{z2*E($B@N@Q=Ob!d|Jxhp1lsw5uuT4AFl&d==q?;yF8L z(ilOB5or4I1PkqyVx!-z*e(qJXOiJG?rF`FkR_Fjz#I(h512*tJPaRR-Svu*;|6m- zruzOU4bwSqCqRQhGULqjYXVaUr?KF0xRfty_pR%i<>O!lwu>>LxQ+Z@0$vn(AkN9` zZN-H;>~Mt9%;eYqCC!!`TTX0u`y_Df-70udrfUX;*3+F3#Eq#{{(r%FXv_{;w|*MJ z9$#W)cF+QdB%e7 z;q85~|Eb(}Qi&PAnmmzx67coP+R!uIT36SouV~FN2gtd#efxvIp-O6ZVlmd{>*!l7lS;1hdz);KcTdMj0ZO&IQ^E^R})_vRLwKikRlLP9EiNX zURha*L9yv~-NZL<>`g2zB<-D@kCmXoMThhvG?3+{*8#(QcuuQ~+Wfx86B85N{wR-< zFBF(T6A*YSTer|D5npl~f%m1aQ9i5Gp?#Z;^qGo@3N8U@F=V)+{ke+5+2>ww)Q(dV z-Z~9j0VM+M_m}>XM?}5U>lv}QeA;RZl=*!Gn*&Ve|1}ikyEHJ2-ZWliy0|Po+J<=t z{qQy#w5qXuZuJp+Np27hHs#aXzU^R!+vYt#+G9_#E2yu_Q8h}OjEUXH&%GHa9iX#z z`-)fGm}D^wz~{2d)kISUz;3uy%j3@h{ONtH*wSanB6jT>d!^HyPRE z>Hjz*D`p+OVRgU0A;Z&rqu`kdYiRABzIvz|xNuK@crkdUM-^eW%OBH%e)x7=9m!TQ z@i%9UH6M+^fwgRHM=a4w!AuWKPSP*7>ey1R++~}I?7 zOf*m5)4oj%5e5o|O#NoL-U^P0m6{qaMg~1ys%F4Xu=uBHs;kXO6{p2>Z~lC~jq8XN zjZ1+QD+MG@&5BI!?$|$m$8j6V{te}i-Itm|)-LsiJb8JO7w8_3p9eSs^5r&;P>EG$ z#g;=oD!r`-BxA~htQo)mjuJ>P)~`A*oR2fO2G4634!g5q4J!ekx{viCv>&qqqhcSM zPVaOPufkE3Xv6zjIRx2#s#nW^W)k3{vht|WHYT+J;Qq^KFFJwIt0#c63>HTp05y0TMX zv@Pfq@==*sG2~4%gdGQH3l^~iYuuqEw;Nqz3l# literal 0 HcmV?d00001 diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index be2e043..028acdd 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -12,14 +12,20 @@ import 'package:flutter/widgets.dart'; class $AssetsIconsGen { const $AssetsIconsGen(); - /// File path: assets/icons/home_ selected.png - AssetGenImage get homeSelected => - const AssetGenImage('assets/icons/home_selected.png'); + /// File path: assets/icons/Start.png + AssetGenImage get start => const AssetGenImage('assets/icons/Start.png'); /// File path: assets/icons/home_noSelected.png AssetGenImage get homeNoSelected => const AssetGenImage('assets/icons/home_noSelected.png'); + /// File path: assets/icons/home_selected.png + AssetGenImage get homeSelected => + const AssetGenImage('assets/icons/home_selected.png'); + + /// File path: assets/icons/horn.png + AssetGenImage get horn => const AssetGenImage('assets/icons/horn.png'); + /// File path: assets/icons/my_noselected.png AssetGenImage get myNoselected => const AssetGenImage('assets/icons/my_noselected.png'); @@ -35,6 +41,9 @@ class $AssetsIconsGen { /// File path: assets/icons/privacy.png AssetGenImage get privacy => const AssetGenImage('assets/icons/privacy.png'); + /// File path: assets/icons/right.png + AssetGenImage get right => const AssetGenImage('assets/icons/right.png'); + /// File path: assets/icons/sms.png AssetGenImage get sms => const AssetGenImage('assets/icons/sms.png'); @@ -47,17 +56,14 @@ class $AssetsIconsGen { /// File path: assets/icons/zhifubao.png AssetGenImage get zhifubao => const AssetGenImage('assets/icons/zhifubao.png'); - /// File path: assets/icons/right.png - AssetGenImage get right => - const AssetGenImage('assets/icons/right.png'); - /// File path: assets/icons/horn.png - AssetGenImage get horn => - const AssetGenImage('assets/icons/horn.png'); } class $AssetsImagesGen { const $AssetsImagesGen(); + /// File path: assets/images/Start.png + AssetGenImage get start => const AssetGenImage('assets/images/Start.png'); + /// File path: assets/images/answer.png AssetGenImage get answer => const AssetGenImage('assets/images/answer.png'); @@ -67,6 +73,10 @@ class $AssetsImagesGen { /// File path: assets/images/bg.png AssetGenImage get bg => const AssetGenImage('assets/images/bg.png'); + /// File path: assets/images/emptylist.png + AssetGenImage get emptylist => + const AssetGenImage('assets/images/emptylist.png'); + /// File path: assets/images/home_bg.png AssetGenImage get homeBg => const AssetGenImage('assets/images/home_bg.png'); @@ -87,8 +97,6 @@ class $AssetsImagesGen { /// File path: assets/images/vipbg.png AssetGenImage get vipbg => const AssetGenImage('assets/images/vipbg.png'); - /// File path: assets/images/Start.png - AssetGenImage get Start => const AssetGenImage('assets/images/Start.png'); } class Assets { diff --git a/lib/main.dart b/lib/main.dart index f000de9..36ec7f6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -25,25 +25,8 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:telephony/telephony.dart'; import 'package:project_telephony/utils/hive_store.dart'; - - - - - void main() async { - // SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( //设置状态栏透明 - // statusBarColor: Colors.transparent, - // statusBarIconBrightness: Brightness.dark, - // )); - // - // WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();//设置启动页 - // FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); - // - // await SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp] ); - // FlutterError.onError = (details) { - // LoggerData.addData(details); - // FlutterError.presentError(details); - // }; + WidgetsFlutterBinding.ensureInitialized(); // await initializeService(); // Workmanager().initialize( diff --git a/lib/ui/home/answer_idle.dart b/lib/ui/home/answer_idle.dart new file mode 100644 index 0000000..982916d --- /dev/null +++ b/lib/ui/home/answer_idle.dart @@ -0,0 +1,272 @@ +import 'package:bot_toast/bot_toast.dart'; + +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:project_telephony/utils/headers.dart'; +import 'package:provider/provider.dart'; + +import '../../base/base_style.dart'; +import '../../constants/api.dart'; +import '../../model/network/api_client.dart'; +import '../../model/network/base_model.dart'; +import '../../providers/user_provider.dart'; +import '../../utils/toast/cloud_toast.dart'; +import '../widget/centertipsalterwidget.dart'; +import 'add_sms_page.dart'; + +class AnswerIdleList extends StatefulWidget { + final EasyRefreshController refreshController; + final bool isIdle; + + // final List contant; + + const AnswerIdleList( + {Key? key, required this.refreshController, required this.isIdle}) + : super(key: key); + + @override + _AnswerIdleListState createState() => _AnswerIdleListState(); +} + +class _AnswerIdleListState extends State + with AutomaticKeepAliveClientMixin { + final userProvider = Provider.of(Get.context!, listen: false); + List textList = ['现在无法接听。有什么事吗?', '自定义短信内容']; + List textListSMS = []; + List smsIdList = []; + int isCheck = 0; + bool val = false; + + // final EasyRefreshController _easyRefreshController = EasyRefreshController(); + @override + Widget build(BuildContext context) { + return Column( + children: [ + _getText(), + 32.hb, + widget.isIdle + ? val + ? Expanded( + // width: 662.w, + // height: 800.w, + child: EasyRefresh.custom( + firstRefresh: true, + controller: widget.refreshController, + header: MaterialHeader(), + // footer: MaterialFooter(), + onRefresh: () async { + await userProvider.updateUserInfo(); + userProvider.updateRefSms(); + updateList(); + setState(() {}); + }, + slivers: [ + SliverList( + delegate: + SliverChildBuilderDelegate((context, index) { + return _getBox(textListSMS[index], index); + }, childCount: textListSMS.length)) + ])) + : _getEmptyList() + : Expanded( + // width: 662.w, + // height: 800.w, + child: EasyRefresh.custom( + firstRefresh: true, + controller: widget.refreshController, + header: MaterialHeader(), + // footer: MaterialFooter(), + onRefresh: () async { + await userProvider.updateUserInfo(); + userProvider.updateRefSms(); + updateList(); + setState(() {}); + }, + slivers: [ + SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + return _getBox(textListSMS[index], index); + }, childCount: textListSMS.length)) + ])) + ], + ); + + // ListView.builder( + // itemBuilder: (context, index) { + // return _getBox(textListSMS[index], index); + // }, + // itemCount: textListSMS.length, + // ), + } + + updateList() async { + if (userProvider.isLogin) { + textListSMS.clear(); + smsIdList.clear(); + int i = 0; + userProvider.userInfo.contentRef?.forEach((model) { + textListSMS.add(model.content); + smsIdList.add(model.id); + if (model.isChecked == 1) { + isCheck = i; + } + i++; + }); + textListSMS.add("自定义短信内容"); + } else { + textListSMS = textList; + } + } + + _getText() { + return Container( + height: 128.w, + // margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), + padding: EdgeInsets.only(left: 40.w, top: 45.w), + child: ListTile( + title: Text( + "功能讲解", + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 36.sp), + ), + subtitle: Text( + widget.isIdle + ? "您给朋友去电接听后所发送的短信":"朋友给你来电接听后所发送的短信", + style: TextStyle(color: const Color(0xFF999999), fontSize: 28.sp), + ), + trailing: widget.isIdle + ? Switch( + value: val, + onChanged: (value) async { + // if(!value){ + // + // } + // await prefs.setBool("kg", value); + // print("这是数据${prefs.getBool("kg")}"); + setState(() { + val = value; + }); + }) + : const SizedBox()), + ); + } + + _getBox(String content, int index) { + return GestureDetector( + onTap: () async { + if (content != "自定义短信内容") { + BaseModel res = await apiClient.request(API.app.checked, + data: {'id': smsIdList[index], 'status': 1}); + if (res.code == 0) { + setState(() {}); + userProvider.updateUserInfo(); + userProvider.updateConSms(); + widget.refreshController.callRefresh(); + } else { + CloudToast.show(res.msg); + } + } else { + if (userProvider.userInfo.isVip == 1) { + if (textListSMS.length > 5) { + BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); + } else { + Get.to(AddSmsPage( + status: 1, + ploneBack: (String textContent) { + widget.refreshController.callRefresh(); + }, + )); + } + } else { + BotToast.showText(text: '请先开通会员'); + } + } + setState(() {}); + }, + onLongPress: () { + if (content != "自定义短信内容") { + if (textListSMS.length == 2 || isCheck == index) { + if (textListSMS.length == 2) { + BotToast.showText(text: '最后一条内容不可删除'); + } else if (isCheck == index) { + BotToast.showText(text: '当前为选中内容,不可删除'); + } + } else { + showDialog( + context: context, + builder: (context) { + return Centertipsalterwidget( + desText: '你确定要删除这个短信模版吗,删除之后无法还原。', + title: '删除短信模板', + id: smsIdList[index], + callback: (bool status) { + widget.refreshController.callRefresh(); + }, + ); + }); + } + } + setState(() {}); + }, + child: Container( + // width: 686.w, + height: 128.w, + margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), + padding: EdgeInsets.only(left: 40.w, top: 45.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + index == isCheck + ? const Color(0xFF1890FF) + : const Color(0xFFF9F9F9), + index == isCheck + ? const Color(0xFF74BCFF) + : const Color(0xFFF9F9F9), + ]), + ), + child: Text( + content, + style: TextStyle( + fontSize: BaseStyle.fontSize28, + color: index == isCheck + ? const Color(0xFFF9F9F9) + : BaseStyle.color333333, + fontWeight: FontWeight.bold), + ), + ), + ); + } + + _getEmptyList() { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + 234.hb, + Image.asset( + Assets.images.emptylist.path, + width: 240.w, + height: 212.w, + fit: BoxFit.fill, + ), + 48.hb, + Text( + "功能已关闭", + style: TextStyle( + color: const Color(0xFF999999), + fontWeight: FontWeight.bold, + fontSize: 36.sp), + ), + 16.hb, + Text( + "去电接听后将不会发送短信", + style: TextStyle(color: const Color(0xFF999999), fontSize: 28.sp), + ), + ], + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/home/calling_idle_list.dart b/lib/ui/home/calling_idle_list.dart new file mode 100644 index 0000000..f721d04 --- /dev/null +++ b/lib/ui/home/calling_idle_list.dart @@ -0,0 +1,275 @@ +import 'package:bot_toast/bot_toast.dart'; + +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:project_telephony/extensions/num_ext.dart'; +import 'package:project_telephony/utils/headers.dart'; +import 'package:provider/provider.dart'; + +import '../../base/base_style.dart'; +import '../../constants/api.dart'; +import '../../model/network/api_client.dart'; +import '../../model/network/base_model.dart'; +import '../../providers/user_provider.dart'; +import '../../utils/toast/cloud_toast.dart'; +import '../widget/centertipsalterwidget.dart'; +import 'add_sms_page.dart'; + +class CallingIdleList extends StatefulWidget { + final EasyRefreshController refreshController; + final bool isIdle; + + // final List contant; + + const CallingIdleList( + {Key? key, required this.refreshController, required this.isIdle}) + : super(key: key); + + @override + _CallingIdleListState createState() => _CallingIdleListState(); +} + +class _CallingIdleListState extends State + with AutomaticKeepAliveClientMixin { + final userProvider = Provider.of(Get.context!, listen: false); + List textList = ['现在无法接听。有什么事吗?', '自定义短信内容']; + List textListSMS = []; + List smsIdList = []; + int isCheck = 0; + bool val = false; + + // final EasyRefreshController _easyRefreshController = EasyRefreshController(); + @override + Widget build(BuildContext context) { + return Column( + children: [ + _getText(), + 32.hb, + widget.isIdle + ? val + ? Expanded( + // width: 662.w, + // height: 800.w, + child: EasyRefresh.custom( + firstRefresh: true, + controller: widget.refreshController, + header: MaterialHeader(), + // footer: MaterialFooter(), + onRefresh: () async { + await userProvider.updateUserInfo(); + userProvider.updateRefSms(); + updateList(); + setState(() {}); + }, + slivers: [ + SliverList( + delegate: + SliverChildBuilderDelegate((context, index) { + return _getBox(textListSMS[index], index); + }, childCount: textListSMS.length)) + ])) + : _getEmptyList() + : Expanded( + // width: 662.w, + // height: 800.w, + child: EasyRefresh.custom( + firstRefresh: true, + controller: widget.refreshController, + header: MaterialHeader(), + // footer: MaterialFooter(), + onRefresh: () async { + await userProvider.updateUserInfo(); + userProvider.updateRefSms(); + updateList(); + setState(() {}); + }, + slivers: [ + SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + return _getBox(textListSMS[index], index); + }, childCount: textListSMS.length)) + ])) + ], + ); + + // ListView.builder( + // itemBuilder: (context, index) { + // return _getBox(textListSMS[index], index); + // }, + // itemCount: textListSMS.length, + // ), + } + + updateList() async { + if (userProvider.isLogin) { + textListSMS.clear(); + smsIdList.clear(); + int i = 0; + userProvider.userInfo.contentRef?.forEach((model) { + textListSMS.add(model.content); + smsIdList.add(model.id); + if (model.isChecked == 1) { + isCheck = i; + } + i++; + }); + textListSMS.add("自定义短信内容"); + } else { + textListSMS = textList; + } + } + + _getText() { + return Container( + height: 128.w, + // margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), + padding: EdgeInsets.only(left: 40.w, top: 45.w), + child: ListTile( + title: Text( + "功能讲解", + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 36.sp), + ), + subtitle: Text( + widget.isIdle + ? "您给朋友去电拒接/未接后所发送的短信":"朋友给你来电接听后所发送的短信", + style: TextStyle(color: const Color(0xFF999999), fontSize: 27.sp), + ), + trailing: widget.isIdle + ? Switch( + value: val, + onChanged: (value) async { + // if(!value){ + // + // } + // await prefs.setBool("kg", value); + // print("这是数据${prefs.getBool("kg")}"); + setState(() { + val = value; + }); + }) + : const SizedBox()), + ); + } + + _getBox(String content, int index) { + return GestureDetector( + onTap: () async { + if (content != "自定义短信内容") { + BaseModel res = await apiClient.request(API.app.checked, + data: {'id': smsIdList[index], 'status': 2}); + if (res.code == 0) { + setState(() {}); + userProvider.updateUserInfo(); + userProvider.updateRefSms(); + widget.refreshController.callRefresh(); + } else { + CloudToast.show(res.msg); + } + } else { + if (userProvider.userInfo.isVip == 1) { + if (textListSMS.length > 5) { + BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); + } else { + Get.to(AddSmsPage( + status: 2, + ploneBack: (String textContent) { + widget.refreshController.callRefresh(); + }, + )); + } + } else { + BotToast.showText(text: '请先开通会员'); + } + } + setState(() {}); + }, + onLongPress: () { + if (content != "自定义短信内容") { + if (textListSMS.length == 2 || isCheck == index) { + if (textListSMS.length == 2) { + BotToast.showText(text: '最后一条内容不可删除'); + } else if (isCheck == index) { + BotToast.showText(text: '当前为选中内容,不可删除'); + } + } else { + showDialog( + context: context, + builder: (context) { + return Centertipsalterwidget( + desText: '你确定要删除这个短信模版吗,删除之后无法还原。', + title: '删除短信模板', + id: smsIdList[index], + callback: (bool status) { + widget.refreshController.callRefresh(); + }, + ); + }); + } + } + setState(() {}); + }, + child: Container( + // width: 686.w, + height: 128.w, + margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), + padding: EdgeInsets.only(left: 40.w, top: 45.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + index == isCheck + ? const Color(0xFF13CA9D) + : const Color(0xFFF9F9F9), + index == isCheck + ? const Color(0xFF72E4C8) + : const Color(0xFFF9F9F9), + ]), + ), + child: Text( + content, + style: TextStyle( + fontSize: BaseStyle.fontSize28, + color: index == isCheck + ? const Color(0xFFF9F9F9) + : BaseStyle.color333333, + fontWeight: FontWeight.bold), + ), + ), + ); + } + + _getEmptyList() { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + 234.hb, + Image.asset( + Assets.images.emptylist.path, + width: 240.w, + height: 212.w, + fit: BoxFit.fill, + ), + 48.hb, + Text( + "功能已关闭", + style: TextStyle( + color: const Color(0xFF999999), + fontWeight: FontWeight.bold, + fontSize: 36.sp), + ), + 16.hb, + Text( + "去电拒接/未接后将不会发送短信", + style: TextStyle(color: const Color(0xFF999999), fontSize: 28.sp), + ), + ], + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/home/content_connect_page.dart b/lib/ui/home/content_connect_page.dart index 67a5ddf..144adbc 100644 --- a/lib/ui/home/content_connect_page.dart +++ b/lib/ui/home/content_connect_page.dart @@ -1,18 +1,15 @@ -import 'package:bot_toast/bot_toast.dart'; + import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:project_telephony/base/base_style.dart'; -import 'package:project_telephony/ui/home/add_sms_page.dart'; -import 'package:project_telephony/ui/widget/centertipsalterwidget.dart'; + import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/utils/headers.dart'; -import 'package:project_telephony/utils/user_tool.dart'; -import 'package:provider/provider.dart'; -import '../../constants/api.dart'; -import '../../model/network/api_client.dart'; -import '../../model/network/base_model.dart'; -import '../../providers/user_provider.dart'; -import '../../utils/toast/cloud_toast.dart'; + +import 'package:tab_indicator_styler/tab_indicator_styler.dart'; + +import 'answer_idle.dart'; + class ContentConnectPage extends StatefulWidget { const ContentConnectPage({Key? key}) : super(key: key); @@ -21,208 +18,110 @@ class ContentConnectPage extends StatefulWidget { _ContentConnectPageState createState() => _ContentConnectPageState(); } -class _ContentConnectPageState extends State { - List textList = ['欢迎您的来电,祝您生活愉快','自定义短信内容']; - List smsIdList = []; - List textListSMS = []; - int isCheck=0; - - final userProvider = Provider.of(Get.context!, listen: false); - final EasyRefreshController _easyRefreshController = EasyRefreshController(); +class _ContentConnectPageState extends State + with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { + late TabController _tabController; + final EasyRefreshController _callingRefreshController = + EasyRefreshController(); + final EasyRefreshController _wasCalledRefreshController = + EasyRefreshController(); @override void initState() { + _tabController = TabController(length: 2, initialIndex: 0, vsync: this); super.initState(); - updateList(); } @override void dispose() { - _easyRefreshController.dispose(); + _tabController.dispose(); + _callingRefreshController.dispose(); + _wasCalledRefreshController.dispose(); super.dispose(); } - updateList() { - if (UserTool.userProvider.isLogin) { - textListSMS.clear(); - smsIdList.clear(); - int i=0; - UserTool.userProvider.userInfo.contentCon?.forEach((model) { - textListSMS.add(model.content); - smsIdList.add(model.id); - if(model.isChecked==1){ - isCheck=i; - } - i++; - }); - textListSMS.add("自定义短信内容"); - } else { - textListSMS = textList; - } - } - @override Widget build(BuildContext context) { + super.build(context); return Scaffold( - appBar: AppBar( - elevation: 0, - title: Text( - '选择短信内容', - style: Theme.of(context).textTheme.headline6, + appBar: AppBar( + elevation: 0, + title: Text( + '选择短信内容', + style: Theme.of(context).textTheme.headline6, + ), + leading: const CloudBackButton(isSpecial: true), + backgroundColor: kForeGroundColor, ), - leading: const CloudBackButton(isSpecial: true), - backgroundColor: kForeGroundColor, - ), - backgroundColor: Colors.white, - body: _getList() - - // Column(children: [ - // // _getEditContent(), - // Expanded(child: _getList()), - // - // - // ]), - ); + backgroundColor: Colors.white, + body: Column( + children: [ + Container( + width:double.infinity, + height: 88.w, + margin: EdgeInsets.symmetric(horizontal: 66.w), + padding: EdgeInsets.all(8.w), + decoration:BoxDecoration(color: const Color(0xFFF9F9F9),borderRadius: BorderRadius.all(Radius.circular(44.w))), + child: TabBar( + // indicator: Decoration(), + controller: _tabController, + labelColor:const Color(0xFF1890FF), + unselectedLabelColor:const Color(0xFF999999), + unselectedLabelStyle:const TextStyle(fontWeight:FontWeight.bold), + labelStyle:const TextStyle(fontWeight:FontWeight.bold), + // onTap: () async{ + // _refreshController.callRefresh(); + // }, + indicator: RectangularIndicator( + color: Colors.white, + bottomLeftRadius: 44.w, + bottomRightRadius: 44.w, + topLeftRadius: 44.w, + topRightRadius: 44.w, + // paintingStyle: PaintingStyle.fill, + ), + // indicatorSize: TabBarIndicatorSize.label, + // isScrollable: true, + tabs: const [ + // _tab(0, "被叫接听"),_tab(1, "主叫接听"), + Tab(text: "被叫接听",),Tab(text: "主叫接听",) + + ]), + + + ), + Expanded( + child: TabBarView(controller: _tabController, children: [ + // _getBox(), + AnswerIdleList( + // contant: const [], + refreshController: _callingRefreshController, isIdle: false, + ), + AnswerIdleList( + // contant: const [], + refreshController: _callingRefreshController, isIdle: true, + ) + ])) + ], + )); } - _getList() { - return - EasyRefresh( - firstRefresh: true, - header: MaterialHeader(), - footer: MaterialFooter(), - controller: _easyRefreshController, - onRefresh: () async { - await UserTool.userProvider.updateUserInfo(); - userProvider.updateConSms(); - updateList(); - setState(() {}); - }, - child: ListView.builder( - shrinkWrap:true, - itemBuilder: (context, index) { - return _getBox(textListSMS[index], index); - }, - itemCount: textListSMS.length, - ), + _getBox() { + return Container( + color: Colors.red, + width: 200.w, + height: 200.w, ); } - _getBox(String content, int index) { - return GestureDetector( - onTap: () async { - if (content != "自定义短信内容") { - BaseModel res = await apiClient.request(API.app.checked, - data: {'id': smsIdList[index], 'status': 1}); - if (res.code == 0) { - setState(() {}); - UserTool.userProvider.updateUserInfo(); - UserTool.userProvider.updateConSms(); - _easyRefreshController.callRefresh(); - } else { - CloudToast.show(res.msg); - } - } else { - if (UserTool.userProvider.userInfo.isVip==1) { - if (textListSMS.length > 5) { - BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); - } else { - Get.to(AddSmsPage( - status: 1, - ploneBack: (String textContent) { - _easyRefreshController.callRefresh(); - }, - )); - } - } else { - BotToast.showText(text: '请先开通会员'); - } - } - setState(() {}); - }, - onLongPress: () { - if (content != "自定义短信内容") { - if (textListSMS.length == 2 || isCheck == index) { - if(textListSMS.length == 2){ - BotToast.showText(text: '最后一条内容不可删除'); - }else if(isCheck == index){ - BotToast.showText(text: '当前为选中内容,不可删除'); - } - } else { - showDialog( - context: context, - builder: (context) { - return Centertipsalterwidget( - desText: '你确定要删除这个短信模版吗,删除之后无法还原。', - title: '删除短信模板', - id: smsIdList[index], - callback: (bool status) { - _easyRefreshController.callRefresh(); - }, - ); - }); - } - } - setState(() {}); - }, - child: Container( - // width: 686.w, - margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), - padding: EdgeInsets.all(40.w), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(16.w), - gradient: LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - index==isCheck? const Color(0xFF74BCFF):const Color(0xFFF9F9F9), - index==isCheck? const Color(0xFF1890FF):const Color(0xFFF9F9F9), - ]), - ), - child: Text( - content, - style: TextStyle( - fontSize: BaseStyle.fontSize28, - color: index==isCheck?const Color(0xFFF9F9F9):BaseStyle.color333333, - fontWeight: FontWeight.bold), - ), - ), + _tab(int int, String string) { + return Text( + string, + style: TextStyle( + fontSize: BaseStyle.fontSize28, color:const Color(0xFF1890FF) ), ); } - // _getEditContent(){ - // return GestureDetector( - // onTap: (){ - // if (UserTool.userProvider.userInfo.isVip==1) { - // if (textListSMS.length > 5) { - // BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); - // } else { - // Get.to(AddSmsPage( - // status: 2, - // ploneBack: (String textContent) { - // _easyRefreshController.callRefresh(); - // }, - // )); - // } - // } else { - // BotToast.showText(text: '请先开通会员'); - // } - // } - // ,child: Container( - // width: double.infinity, - // height: 128.w, - // margin: EdgeInsets.symmetric(horizontal: 64.w), - // padding: EdgeInsets.only(left: 40.w,top: 45.w), - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(16), - // color: const Color(0xFFF9F9F9), - // ), - // child: Text( - // "定义短信内容", - // style: TextStyle( - // fontSize: BaseStyle.fontSize28, - // color: BaseStyle.color333333, - // fontWeight: FontWeight.bold), - // ), - // ),); - // } + + @override + bool get wantKeepAlive => true; } diff --git a/lib/ui/home/content_refuse_page.dart b/lib/ui/home/content_refuse_page.dart index 8569dec..7389f5d 100644 --- a/lib/ui/home/content_refuse_page.dart +++ b/lib/ui/home/content_refuse_page.dart @@ -8,12 +8,14 @@ import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/utils/headers.dart'; import 'package:project_telephony/utils/user_tool.dart'; import 'package:provider/provider.dart'; +import 'package:tab_indicator_styler/tab_indicator_styler.dart'; import '../../constants/api.dart'; import '../../model/network/api_client.dart'; import '../../model/network/base_model.dart'; import '../../providers/user_provider.dart'; import '../../utils/toast/cloud_toast.dart'; import 'add_sms_page.dart'; +import 'calling_idle_list.dart'; class ContentRefusePage extends StatefulWidget { const ContentRefusePage({Key? key}) : super(key: key); @@ -22,214 +24,110 @@ class ContentRefusePage extends StatefulWidget { _ContentRefusePageState createState() => _ContentRefusePageState(); } -class _ContentRefusePageState extends State { - List textList = ['现在无法接听。有什么事吗?', '自定义短信内容']; - List textListSMS = []; - List smsIdList = []; - int isCheck=0; - final userProvider = Provider.of(Get.context!, listen: false); - final EasyRefreshController _easyRefreshController = EasyRefreshController(); +class _ContentRefusePageState extends State + with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { + late TabController _tabController; + final EasyRefreshController _callingRefreshController = + EasyRefreshController(); + final EasyRefreshController _wasCalledRefreshController = + EasyRefreshController(); @override void initState() { + _tabController = TabController(length: 2, initialIndex: 0, vsync: this); super.initState(); - updateList(); } @override void dispose() { - _easyRefreshController.dispose(); + _tabController.dispose(); + _callingRefreshController.dispose(); + _wasCalledRefreshController.dispose(); super.dispose(); } - updateList() async { - if (userProvider.isLogin) { - textListSMS.clear(); - smsIdList.clear(); - int i=0; - userProvider.userInfo.contentRef?.forEach((model) { - textListSMS.add(model.content); - smsIdList.add(model.id); - if(model.isChecked==1){ - isCheck=i; - } - i++; - }); - textListSMS.add("自定义短信内容"); - } else { - textListSMS = textList; - } - } - @override Widget build(BuildContext context) { + super.build(context); return Scaffold( - appBar: AppBar( - elevation: 0, - title: Text( - '选择短信内容', - style: Theme.of(context).textTheme.headline6, + appBar: AppBar( + elevation: 0, + title: Text( + '选择短信内容', + style: Theme.of(context).textTheme.headline6, + ), + leading: const CloudBackButton(isSpecial: true), + backgroundColor: kForeGroundColor, ), - leading: const CloudBackButton(isSpecial: true), - backgroundColor: kForeGroundColor, - ), - backgroundColor: Colors.white, - body: _getList() - // Column(children: [ - // _getEditContent(), - // Expanded( - // child: _getList(), - // ), - // - // ]), - // bottomNavigationBar: _getEditContent(), - ); - } + backgroundColor: Colors.white, + body: Column( + children: [ + Container( + width:double.infinity, + height: 88.w, + margin: EdgeInsets.symmetric(horizontal: 66.w), + padding: EdgeInsets.all(8.w), + decoration:BoxDecoration(color: const Color(0xFFF9F9F9),borderRadius: BorderRadius.all(Radius.circular(44.w))), + child: TabBar( + // indicator: Decoration(), + controller: _tabController, + labelColor:const Color(0xFF1890FF), + unselectedLabelColor:const Color(0xFF999999), + unselectedLabelStyle:const TextStyle(fontWeight:FontWeight.bold), + labelStyle:const TextStyle(fontWeight:FontWeight.bold), + // onTap: () async{ + // _refreshController.callRefresh(); + // }, + indicator: RectangularIndicator( + color: Colors.white, + bottomLeftRadius: 44.w, + bottomRightRadius: 44.w, + topLeftRadius: 44.w, + topRightRadius: 44.w, + // paintingStyle: PaintingStyle.fill, + ), + // indicatorSize: TabBarIndicatorSize.label, + // isScrollable: true, + tabs: const [ + // _tab(0, "被叫接听"),_tab(1, "主叫接听"), + Tab(text: "被叫拒接/未接",),Tab(text: "主叫拒接/未接",) - _getList() { - return EasyRefresh( - firstRefresh: true, - header: MaterialHeader(), - footer: MaterialFooter(), - controller: _easyRefreshController, - onRefresh: () async { - await userProvider.updateUserInfo(); - userProvider.updateRefSms(); - updateList(); - setState(() {}); - }, - child: ListView.builder( - itemBuilder: (context, index) { - return _getBox(textListSMS[index], index); - }, - itemCount: textListSMS.length, - ), - ); - } + ]), - _getBox(String content, int index) { - return GestureDetector( - onTap: () async { - if (content != "自定义短信内容") { - BaseModel res = await apiClient.request(API.app.checked, - data: {'id': smsIdList[index], 'status': 2}); - if (res.code == 0) { - setState(() {}); - userProvider.updateUserInfo(); - userProvider.updateRefSms(); - _easyRefreshController.callRefresh(); - } else { - CloudToast.show(res.msg); - } - } else { - if (userProvider.userInfo.isVip==1) { - if (textListSMS.length > 5) { - BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); - } else { - Get.to(AddSmsPage( - status: 2, - ploneBack: (String textContent) { - _easyRefreshController.callRefresh(); - }, - )); - } - } else { - BotToast.showText(text: '请先开通会员'); - } - } - setState(() {}); - }, - onLongPress: () { + ), + Expanded( + child: TabBarView(controller: _tabController, children: [ + // _getBox(), + CallingIdleList( + // contant: const [], + refreshController: _callingRefreshController, isIdle: false, + ), + CallingIdleList( + // contant: const [], + refreshController: _callingRefreshController, isIdle: true, + ) + ])) + ], + )); + } - if (content != "自定义短信内容") { - if (textListSMS.length == 2 || isCheck == index) { - if(textListSMS.length == 2){ - BotToast.showText(text: '最后一条内容不可删除'); - }else if(isCheck == index){ - BotToast.showText(text: '当前为选中内容,不可删除'); - } - } else { - showDialog( - context: context, - builder: (context) { - return Centertipsalterwidget( - desText: '你确定要删除这个短信模版吗,删除之后无法还原。', - title: '删除短信模板', - id: smsIdList[index], - callback: (bool status) { - _easyRefreshController.callRefresh(); - }, - ); - }); - } - } - setState(() {}); - }, - child: - Container( - // width: 686.w, - height: 128.w, - margin: EdgeInsets.only(top: 32.w, left: 64.w, right: 64.w), - padding: EdgeInsets.only(left: 40.w,top: 45.w), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(16), - gradient: LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - index==isCheck? const Color(0xFF13CA9D):const Color(0xFFF9F9F9), - index==isCheck? const Color(0xFF72E4C8):const Color(0xFFF9F9F9), - ]), + _getBox() { + return Container( + color: Colors.red, + width: 200.w, + height: 200.w, + ); + } - ), - child: Text( - content, - style: TextStyle( - fontSize: BaseStyle.fontSize28, - color: index==isCheck?const Color(0xFFF9F9F9):BaseStyle.color333333, - fontWeight: FontWeight.bold), - ), - ), + _tab(int int, String string) { + return Text( + string, + style: TextStyle( + fontSize: BaseStyle.fontSize28, color:const Color(0xFF1890FF) ), ); } - // int _getEasyRefresh(){ - // return EasyRefresh(onRefresh: ,child: ,); - // } - // _getEditContent(){ - // return GestureDetector( - // onTap: (){ - // if (userProvider.userInfo.isVip==1) { - // if (textListSMS.length > 5) { - // BotToast.showText(text: '自定义数量已达上限,请先删除不需要的短信'); - // } else { - // Get.to(AddSmsPage( - // status: 2, - // ploneBack: (String textContent) { - // _easyRefreshController.callRefresh(); - // }, - // )); - // } - // } else { - // BotToast.showText(text: '请先开通会员'); - // } - // } - // ,child: Container( - // width: double.infinity, - // height: 128.w, - // margin: EdgeInsets.symmetric(horizontal: 64.w), - // padding: EdgeInsets.only(left: 40.w,top: 45.w), - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(16), - // color: const Color(0xFFF9F9F9), - // ), - // child: Text( - // "定义短信内容", - // style: TextStyle( - // fontSize: BaseStyle.fontSize28, - // color: BaseStyle.color333333, - // fontWeight: FontWeight.bold), - // ), - // ),); - // } + + @override + bool get wantKeepAlive => true; } diff --git a/lib/ui/home/home_page.dart b/lib/ui/home/home_page.dart index 0e9c1f7..92a1f36 100644 --- a/lib/ui/home/home_page.dart +++ b/lib/ui/home/home_page.dart @@ -193,12 +193,12 @@ class _HomePageState extends State with WidgetsBindingObserver { _getContainer(String title, String text, String image, Color cl1, Color cl2) { return GestureDetector( onTap: () { - print(title); + // print(title); if (title == "接听后") { Get.to(() => const ContentConnectPage()); } else { Get.to(() => const ContentRefusePage()); - print("未接听"); + // print("未接听"); } }, child: Container( diff --git a/lib/ui/loading.dart b/lib/ui/loading.dart index fe4e10c..7e618f9 100644 --- a/lib/ui/loading.dart +++ b/lib/ui/loading.dart @@ -57,7 +57,7 @@ class _LoadingState extends State { bottom: 158.w, left: 143.w, child: Image.asset( - Assets.images.Start.path,width:434.sp,height:148.sp , fit: BoxFit.fill),), + Assets.images.start.path,width:434.sp,height:148.sp , fit: BoxFit.fill),), ], )); diff --git a/lib/ui/user/privacy_rights_page.dart b/lib/ui/user/privacy_rights_page.dart index 5579b0f..461f9b8 100644 --- a/lib/ui/user/privacy_rights_page.dart +++ b/lib/ui/user/privacy_rights_page.dart @@ -1,12 +1,15 @@ + import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/base/base_style.dart'; -import 'package:project_telephony/ui/user/privacy_rights_page.dart'; + import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/utils/headers.dart'; import 'package:url_launcher/url_launcher.dart'; + + class PrivacyRightsPage extends StatefulWidget { final String name; diff --git a/pubspec.lock b/pubspec.lock index 6119083..35ae3bc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1018,6 +1018,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.0+2" + tab_indicator_styler: + dependency: "direct main" + description: + name: tab_indicator_styler + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" telephony: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 90de2fd..8f502b4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -91,7 +91,8 @@ dependencies: flutter_easyrefresh: ^2.2.1 # 链接 url_launcher: ^6.1.5 - +#tabBar样式切换 + tab_indicator_styler: ^2.0.0 # # jdk # jverify: ^2.2.5 ## pub 集成