From da09a3eb6874fcb152fa47aebfd0c0cdf8def217 Mon Sep 17 00:00:00 2001 From: datang Date: Mon, 29 Aug 2022 17:31:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E5=91=98=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ui/user/members_page.dart | 203 +++++++++-------- lib/ui/user/user_page.dart | 317 +++++++++++++++------------ lib/ui/widget/plone_back_button.dart | 2 +- 3 files changed, 288 insertions(+), 234 deletions(-) diff --git a/lib/ui/user/members_page.dart b/lib/ui/user/members_page.dart index a32e29e..4292d21 100644 --- a/lib/ui/user/members_page.dart +++ b/lib/ui/user/members_page.dart @@ -3,6 +3,7 @@ import 'dart:ffi'; import 'package:bot_toast/bot_toast.dart'; import 'package:flustars/flustars.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/tab_navigator.dart'; import 'package:project_telephony/ui/user/user_page.dart'; @@ -22,7 +23,6 @@ import '../../model/pay/wx_pay_model.dart'; import '../../utils/pay_util.dart'; import '../../utils/toast/cloud_toast.dart'; - class MembersPage extends StatefulWidget { const MembersPage({Key? key}) : super(key: key); @@ -30,7 +30,6 @@ class MembersPage extends StatefulWidget { _MembersPageState createState() => _MembersPageState(); } - List? data; final List _piceList = [ ChooseItems( @@ -42,7 +41,7 @@ final List _piceList = [ pice: 1, ), ]; -ChooseItems? _chooseItem= _piceList[0]; +ChooseItems? _chooseItem = _piceList[0]; int _selectIndex = 0; List payWay = [ { @@ -52,84 +51,105 @@ List payWay = [ {'payName': '支付宝支付', 'payUrl': Assets.icons.zhifubao.path} ]; -class _MembersPageState extends State { - int nowPrice=1; +class _MembersPageState extends State { + int nowPrice = 1; + final EasyRefreshController _easyRefreshController = EasyRefreshController(); + + @override + void dispose() { + _easyRefreshController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Scaffold( - body: Stack( - children: [ - Align( - child: SizedBox( - width: 750.w, - height: 1624.w, - ), - ), - Positioned( - child: Image.asset( - Assets.images.vipbg.path, - )), - Positioned(top: 256.w, left: 32.w, child: _getBanner()), - Positioned( - top: 480.w, - child: Container( - height: 1208.w, + body: EasyRefresh( + firstRefresh: true, + header: MaterialHeader(), + footer: MaterialFooter(), + controller: _easyRefreshController, + onRefresh: () async { + await UserTool.userProvider.updateUserInfo(); + + setState(() {}); + }, + child: Stack( + children: [ + Align( + child: SizedBox( width: 750.w, - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20))), - child: Column(children: [ - _getRecharge(), - _getSpay(payWay), - PloneBottom( - border: true, - onTap: () async { - if(_chooseItem == null){ - Get.snackbar('提示', "请先选择充值月份"); - }else{ - if (_selectIndex == 0) { - _wxPayFunc(); - }else{ - var result = await isAliPayInstalled(); // 这里判断是否安装支付宝 - if(!result){ - Get.snackbar('提示', "请先安装支付宝"); - }else{ - _aliPay(); - // aliPay("paySign").then((payResult) { - // // map["paySign"]是请求接口返回的字符串直接放进去就好了 - // print("支付宝:$payResult"); - // if (payResult['resultStatus'] == '9000') { - // Get.snackbar('提示', "充值成功"); - // } else { - // Get.snackbar('提示', payResult['memo']); - // } - // }); + height: 1624.w, + ), + ), + Positioned( + child: Image.asset( + Assets.images.vipbg.path, + )), + Positioned(top: 256.w, left: 32.w, child: _getBanner()), + Positioned( + top: 480.w, + child: Container( + height: 1208.w, + width: 750.w, + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20))), + child: Column(children: [ + _getRecharge(), + _getSpay(payWay), + PloneBottom( + border: true, + onTap: () async { + if (_chooseItem == null) { + Get.snackbar('提示', "请先选择充值月份"); + } else { + if (_selectIndex == 0) { + _wxPayFunc(); + } else { + var result = + await isAliPayInstalled(); // 这里判断是否安装支付宝 + if (!result) { + Get.snackbar('提示', "请先安装支付宝"); + } else { + _aliPay(); + // aliPay("paySign").then((payResult) { + // // map["paySign"]是请求接口返回的字符串直接放进去就好了 + // print("支付宝:$payResult"); + // if (payResult['resultStatus'] == '9000') { + // Get.snackbar('提示', "充值成功"); + // } else { + // Get.snackbar('提示', payResult['memo']); + // } + // }); + } } } - } - }, - textColor: const Color(0xFF333333), - text: UserTool.userProvider.userInfo.isVip!=1?"立即开通":"立即续费", - - color1: const Color(0xFFFFF6D8), - color2: const Color(0xFFFFEAB0), - ) - ]), - )), - Positioned( - top: 68.w, - child: Row( - children: [ - const CloudBackButton( - isSpecial: true, - ), - 154.wb, - Text('会员中心', style: Theme.of(context).textTheme.headline6), - ], - )), - ], + }, + textColor: const Color(0xFF333333), + text: UserTool.userProvider.userInfo.isVip != 1 + ? "立即开通" + : "立即续费", + color1: const Color(0xFFFFF6D8), + color2: const Color(0xFFFFEAB0), + ) + ]), + )), + Positioned( + top: 68.w, + child: Row( + children: [ + const CloudBackButton( + isSpecial: true, + ), + 154.wb, + Text('会员中心', style: Theme.of(context).textTheme.headline6), + ], + )), + ], + ), ), ); } @@ -173,7 +193,9 @@ class _MembersPageState extends State { ), 16.hb, Text( - UserTool.userProvider.userInfo.isVip!=1?"暂未开通会员":"${DateUtil.formatDateMs(UserTool.userProvider.userInfo.end * 1000, format: DateFormats.y_mo_d)}到期", + UserTool.userProvider.userInfo.isVip != 1 + ? "暂未开通会员" + : "${DateUtil.formatDateMs(UserTool.userProvider.userInfo.end * 1000, format: DateFormats.y_mo_d)}到期", style: TextStyle(color: Colors.white, fontSize: BaseStyle.fontSize24), ), ], @@ -200,8 +222,8 @@ class _MembersPageState extends State { color: const Color(0xFFFFEAB0), ), ), - Text( - UserTool.userProvider.userInfo.isVip!=1?"未开通会员":"已成为会员", + Text( + UserTool.userProvider.userInfo.isVip != 1 ? "未开通会员" : "已成为会员", style: const TextStyle( color: Color( 0xFFFFEAB0, @@ -212,12 +234,11 @@ class _MembersPageState extends State { ); } - - Future _wxPayFunc() async{ - bool isInstalled=await fluwx.isWeChatInstalled; - if(!isInstalled){ + Future _wxPayFunc() async { + bool isInstalled = await fluwx.isWeChatInstalled; + if (!isInstalled) { BotToast.showText(text: "请先安装微信"); - return ; + return; } //调起支付 _wxPay(); @@ -233,6 +254,7 @@ class _MembersPageState extends State { // payModel: wxPayModel, // ); } + // base ={ // "content": { // "prepayId": "wx121434071826969924754d7d3309520000", @@ -243,10 +265,10 @@ class _MembersPageState extends State { // "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, - // }); + // await apiClient.request(API.user.wallet.assessRecharge, data: { + // 'count': widget.count, + // 'payType': 2, + // }); // if (base.code ==null) { // // } else { @@ -261,11 +283,12 @@ class _MembersPageState extends State { }); if (base.code == 0) { await PayUtil().callAliPay(base.data); - Get.offAll(const TabNavigator(index: 1,)); + _easyRefreshController.callRefresh(); } else { CloudToast.show(base.msg); } } + Future _wxPay() async { var base = await apiClient.request(API.pay.wxpay, data: { // 'amount': nowPrice,//注释 @@ -276,7 +299,7 @@ class _MembersPageState extends State { await PayUtil().callWxPay( payModel: wxPayModel, ); - Get.offAll(const TabNavigator(index: 1,)); + _easyRefreshController.callRefresh(); } else { CloudToast.show(base.msg); } @@ -301,7 +324,7 @@ class _MembersPageState extends State { mainAxisSpacing: 20.w, callback: (item, index) { _chooseItem = item; - nowPrice=_piceList[index].pice; + nowPrice = _piceList[index].pice; setState(() {}); }, pickItem: _chooseItem, diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 4fefd6c..3b79573 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -3,6 +3,7 @@ import 'package:flustars/flustars.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/base/base_style.dart'; import 'package:project_telephony/ui/login/login_page.dart'; @@ -46,36 +47,46 @@ class _UserPageState extends State { String? endDate; final service = FlutterBackgroundService(); - late bool vle=false; - // bool vle=service.isRunning() as bool; - _load() async{ - vle=await service.isRunning(); + late bool vle = false; + + _load() async { + vle = await service.isRunning(); } + + final EasyRefreshController _easyRefreshController = EasyRefreshController(); + + @override + void dispose() { + _easyRefreshController.dispose(); + super.dispose(); + } + @override void initState() { super.initState(); UserTool.userProvider.updateUserInfo(); - Future.delayed(const Duration(milliseconds: 0), ()=>setState(() { - if ( UserTool.userProvider.isLogin) { - print(UserTool.userProvider.userInfo.end*1000); - print(DateTime.now().millisecondsSinceEpoch); - if (UserTool.userProvider.userInfo.end*1000>DateTime.now().microsecondsSinceEpoch) { - isVip = false; - vle=false; - } else { - isVip = true; - _load(); - } - //service.isRunning() as bool; - endDate=DateUtil.formatDateMs(UserTool.userProvider.userInfo.end * 1000, format: DateFormats.y_mo_d); - }else{ - vle = false; - } - })); - // Future.delayed(const Duration(milliseconds: 0), () async { - // - // }); - + Future.delayed( + const Duration(milliseconds: 0), + () => setState(() { + if (UserTool.userProvider.isLogin) { + print(UserTool.userProvider.userInfo.end * 1000); + print(DateTime.now().millisecondsSinceEpoch); + if (UserTool.userProvider.userInfo.end * 1000 > + DateTime.now().microsecondsSinceEpoch) { + isVip = false; + vle = false; + } else { + isVip = true; + _load(); + } + //service.isRunning() as bool; + endDate = DateUtil.formatDateMs( + UserTool.userProvider.userInfo.end * 1000, + format: DateFormats.y_mo_d); + } else { + vle = false; + } + })); } @override @@ -88,39 +99,39 @@ class _UserPageState extends State { path: Assets.images.bg.path, bodyColor: Colors.white, extendBody: true, - - body: Column(children: [ - _getUser(), - 72.hb, - _getBanner(), - 120.hb, - _getSwitch2(), - _getSwitch(Assets.icons.privacy.path, "隐私政策", false), - _getSwitch(Assets.icons.permissions.path, "权限说明", false), - _getSwitch(Assets.icons.sms.path, "短信标签", false), - // const Spacer(), - 182.hb, - UserTool. userProvider.isLogin - ? PloneBottom( - border: false, - onTap: () async { - - var cancel = CloudToast.loading; - var base = await apiClient.request(API.app.logout, - showMessage: true); - if (base.code == 0) { - UserTool.userProvider.logout(); - Get.offAll(const TabNavigator()); - } - cancel(); - }, - textColor: const Color(0xFF1890FF), - color1: const Color(0xFFEBF5FF), - color2: const Color(0xFFEBF5FF), - text: "退出登录", - ) - : const SizedBox() - ]), + body: Column( + children: [ + _getUser(), + 72.hb, + _getBanner(), + 120.hb, + _getSwitch2(), + _getSwitch(Assets.icons.privacy.path, "隐私政策", false), + _getSwitch(Assets.icons.permissions.path, "权限说明", false), + _getSwitch(Assets.icons.sms.path, "短信标签", false), + // const Spacer(), + 182.hb, + UserTool.userProvider.isLogin + ? PloneBottom( + border: false, + onTap: () async { + var cancel = CloudToast.loading; + var base = await apiClient.request(API.app.logout, + showMessage: true); + if (base.code == 0) { + UserTool.userProvider.logout(); + Get.offAll(const TabNavigator()); + } + cancel(); + }, + textColor: const Color(0xFF1890FF), + color1: const Color(0xFFEBF5FF), + color2: const Color(0xFFEBF5FF), + text: "退出登录", + ) + : const SizedBox() + ], + ), ); } @@ -132,7 +143,7 @@ class _UserPageState extends State { children: [ GestureDetector( onTap: () { - if(!userProvider.isLogin){ + if (!userProvider.isLogin) { Get.to(() => const LoginPage()); } }, @@ -140,8 +151,10 @@ class _UserPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - UserTool.userProvider.isLogin ?UserTool.userProvider.userInfo.name : "登录/注册", - // UserTool.userProvider.userInfo.name , + UserTool.userProvider.isLogin + ? UserTool.userProvider.userInfo.name + : "登录/注册", + // UserTool.userProvider.userInfo.name , style: TextStyle( fontSize: BaseStyle.fontSize48, color: BaseStyle.color333333, @@ -168,7 +181,9 @@ class _UserPageState extends State { }, child: ClipOval( child: Image.asset( - UserTool.userProvider.isLogin?Assets.images.portraitDeep.path:Assets.images.portrait.path, + UserTool.userProvider.isLogin + ? Assets.images.portraitDeep.path + : Assets.images.portrait.path, height: 128.w, width: 128.w, fit: BoxFit.cover, @@ -185,35 +200,49 @@ class _UserPageState extends State { return SizedBox( // margin: EdgeInsets.symmetric(horizontal: 32.w), height: 144.w, - child: Stack(children: [ - Align( - child: SizedBox( - width: 622.w, - child: Image.asset( - Assets.images.banner.path, - fit: BoxFit.fill, - ), - )), - Positioned( + child: Stack( + children: [ + Align( + child: SizedBox( + width: 622.w, + child: Image.asset( + Assets.images.banner.path, + fit: BoxFit.fill, + ), + )), + Positioned( child: Container( - padding: EdgeInsets.symmetric(horizontal: 112.w, vertical: 24.w), - // margin: EdgeInsets.symmetric(horizontal: 64.w, vertical: 16.w), - // padding: EdgeInsets.symmetric(), - child: Row( - children: [_getText(), const Spacer(), _getBotton()], + padding: EdgeInsets.symmetric(horizontal: 112.w, vertical: 24.w), + // margin: EdgeInsets.symmetric(horizontal: 64.w, vertical: 16.w), + // padding: EdgeInsets.symmetric(), + child: Row( + children: [_getText(), const Spacer(), _getBotton()], + ), + ), ), - )) - ]), + ], + ), ); } + _getRequests() async { + endDate = DateUtil.formatDateMs( + UserTool.userProvider.userInfo.end * 1000, + format: DateFormats.y_mo_d); + setState(() {}); + } + //banner botton _getBotton() { return GestureDetector( onTap: () { - if(userProvider.isLogin){ - Get.to(() => const MembersPage()); - }else{ + if (userProvider.isLogin) { + Navigator.of(context) + .push( + MaterialPageRoute(builder: (_) => const MembersPage()), + ) + .then((val) => _getRequests()); + } else { BotToast.showText(text: '您还未登录,请先登录!'); } }, @@ -281,72 +310,73 @@ class _UserPageState extends State { } //内容 - _getSwitch2(){ - return Container( + _getSwitch2() { + return Container( padding: EdgeInsets.symmetric(horizontal: 32.w), child: ListTile( // onTap: (() {}), - leading: Image.asset( - Assets.icons.switch1.path, - height: 54.w, - width: 56.w, - fit: BoxFit.fill, - ), - title: Text( - "功能开关", - style: TextStyle( - color: BaseStyle.color333333, - fontSize: BaseStyle.fontSize34, - fontWeight: FontWeight.bold), - ), - trailing: Switch( - value: vle, - onChanged: (value) async { + leading: Image.asset( + Assets.icons.switch1.path, + height: 54.w, + width: 56.w, + fit: BoxFit.fill, + ), + title: Text( + "功能开关", + style: TextStyle( + color: BaseStyle.color333333, + fontSize: BaseStyle.fontSize34, + fontWeight: FontWeight.bold), + ), + trailing: Switch( + value: vle, + onChanged: (value) async { + final SharedPreferences prefs = await _prefs; + // if(!value){ + // + // } + // await prefs.setBool("kg", value); + // print("这是数据${prefs.getBool("kg")}"); + setState(() { + if (isVip) { + vle = value; + // prefs.setBool("kg", vle); + // initializeService(); + if (vle) { + print("true"); + prefs.remove("kg"); + prefs.setBool("kg", vle); + service.startService(); + // WidgetsFlutterBinding.ensureInitialized(); + // initializeService(); + // UserTool.userProvider.setKg(vle) + // initializeService(); + initializeService(); + BotToast.showText(text: " 你开启了该功能"); + // initializeService(); + // print("这是数据${prefs.getBool("kg")}"); + } else { + prefs.remove("kg"); + prefs.setBool("kg", vle); + service.invoke("stopService"); - final SharedPreferences prefs = await _prefs; - // if(!value){ - // - // } - // await prefs.setBool("kg", value); - // print("这是数据${prefs.getBool("kg")}"); - setState(() { - if(isVip){ - vle=value; - // prefs.setBool("kg", vle); - // initializeService(); - if(vle){ - print("true"); - prefs.remove("kg"); - prefs.setBool("kg", vle); - service.startService(); - // WidgetsFlutterBinding.ensureInitialized(); - // initializeService(); - // UserTool.userProvider.setKg(vle) - // initializeService(); - initializeService(); - BotToast.showText(text: " 你开启了该功能"); - // initializeService(); - // print("这是数据${prefs.getBool("kg")}"); - }else{ - prefs.remove("kg"); - prefs.setBool("kg", vle); - service.invoke("stopService");///有问题?? - // exit(0); + ///有问题?? + // exit(0); // UserTool.userProvider.setKg(vle); - // prefs.setBool("kg", false); - // initializeService(); + // prefs.setBool("kg", false); + // initializeService(); - BotToast.showText(text: "你已经关闭该功能"); - // print("这是数据${prefs.getBool("kg")}"); - } - }else{ - BotToast.showText(text: "还没有开通会员,不可使用改功能"); + BotToast.showText(text: "你已经关闭该功能"); + // print("这是数据${prefs.getBool("kg")}"); } - - }); - }), - )); + } else { + BotToast.showText(text: "还没有开通会员,不可使用改功能"); + } + }); + }), + )); } + _getSwitch(String url, String name, bool pd) { return GestureDetector( onTap: () async { @@ -354,8 +384,9 @@ class _UserPageState extends State { switch (name) { case "短信标签": Get.to(() => ContentDetailsPage( - content: - UserTool.userProvider.isLogin ? UserTool.userProvider.userInfo.tag : "", + content: UserTool.userProvider.isLogin + ? UserTool.userProvider.userInfo.tag + : "", ploneBack: (String textContent) { // print("这是数据" + textContent); // textList.setAll(index, {textContent}); @@ -392,7 +423,7 @@ class _UserPageState extends State { fontSize: BaseStyle.fontSize34, fontWeight: FontWeight.bold), ), - trailing:const Icon(Icons.keyboard_arrow_right)), + trailing: const Icon(Icons.keyboard_arrow_right)), ), ); } diff --git a/lib/ui/widget/plone_back_button.dart b/lib/ui/widget/plone_back_button.dart index 381aa63..5773d4b 100644 --- a/lib/ui/widget/plone_back_button.dart +++ b/lib/ui/widget/plone_back_button.dart @@ -18,7 +18,7 @@ class CloudBackButton extends StatelessWidget { ? Padding( padding: isSpecial ? EdgeInsets.only(left: 8.w) : EdgeInsets.zero, child: IconButton( - onPressed: () => Get.back(), + onPressed: () => Navigator.pop(context,true), icon: Icon( CupertinoIcons.chevron_back, color: color,