From b17eba5f26a93af43ffa9990ccbb63c9c3631cb2 Mon Sep 17 00:00:00 2001 From: wurong <953969641@qq.com> Date: Tue, 7 Mar 2023 22:59:49 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/retrofit/min_api.dart | 2 +- lib/retrofit/retrofit_api.dart | 2 +- .../settlement_order_commodity.dart | 128 ++++++++++-------- lib/utils/flutter_utils.dart | 10 ++ pubspec.yaml | 2 +- 5 files changed, 86 insertions(+), 58 deletions(-) diff --git a/lib/retrofit/min_api.dart b/lib/retrofit/min_api.dart index 7e9d7012..1308a39d 100644 --- a/lib/retrofit/min_api.dart +++ b/lib/retrofit/min_api.dart @@ -26,7 +26,7 @@ import 'data/shopping_home_config.dart'; part 'min_api.g.dart'; -const localBaseUrl = "http://192.168.10.129:8765/app/";///本地 +const localBaseUrl = "https://pos.api.lotus-wallet.com/app/";///本地 // const localBaseUrl = "https://2946-27-19-77-115.jp.ngrok.io/app/";///本地 const serviceBaseUrl = "https://pos.api.lotus-wallet.com/app/";///线上 diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index d0cbdfe8..57d5221c 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -64,7 +64,7 @@ import 'data/wx_pay.dart'; part 'retrofit_api.g.dart'; -const localBaseUrl = "http://192.168.10.129:8766/app/";///本地 +const localBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///本地 // const localBaseUrl = "https://2946-27-19-77-115.jp.ngrok.io/app/";///本地 const serviceBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///线上 diff --git a/lib/settlement/settlement_view/settlement_order_commodity.dart b/lib/settlement/settlement_view/settlement_order_commodity.dart index fa7a2ee1..bd554982 100644 --- a/lib/settlement/settlement_view/settlement_order_commodity.dart +++ b/lib/settlement/settlement_view/settlement_order_commodity.dart @@ -21,13 +21,18 @@ class SettlementOrderCommodity extends StatefulWidget { final bool showVipTips; SettlementOrderCommodity( - this.isTakeOut, this.settleOrderInfo, this.minOrderInfo,this.tableId,this.pageType,this.useVipPriceSelect,this.showVipTips); + this.isTakeOut, + this.settleOrderInfo, + this.minOrderInfo, + this.tableId, + this.pageType, + this.useVipPriceSelect, + this.showVipTips); @override State createState() { return _SettlementOrderCommodity(); } - } class _SettlementOrderCommodity extends State { @@ -105,38 +110,47 @@ class _SettlementOrderCommodity extends State { ); } - if(widget.useVipPriceSelect && widget.settleOrderInfo.memberVO.isVip && (!widget.settleOrderInfo.isRaise) && (widget?.settleOrderInfo?.discountAmount!= "0")){ - widgets.add(vipItem(Color(0xFFFF7A1A), "VIP优惠", widget?.settleOrderInfo?.discountAmount ?? "")); + if (widget.useVipPriceSelect && + widget.settleOrderInfo.memberVO.isVip && + (!widget.settleOrderInfo.isRaise) && + (widget?.settleOrderInfo?.discountAmount != "0")) { + widgets.add(vipItem(Color(0xFFFF7A1A), "VIP优惠", + widget?.settleOrderInfo?.discountAmount ?? "")); } - if(widget.showVipTips){ - widgets.add(GestureDetector(child: Container( - alignment: Alignment.centerLeft, - child:Text.rich( - TextSpan( - children: [ - TextSpan( - text: "您未购买回乡VIP卡,无法享受优惠,", - style: TextStyle( - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - color: Colors.black, + if (widget.showVipTips) { + widgets.add(GestureDetector( + child: Container( + alignment: Alignment.centerLeft, + child: Text.rich( + TextSpan( + children: [ + TextSpan( + text: "您未购买回乡VIP卡,无法享受优惠,", + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Colors.black, + ), ), - ), - TextSpan( - text: "点击立即购买", - style: TextStyle( - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - color: Color(0xFFFF7A1A), + TextSpan( + text: "点击立即购买", + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFFFF7A1A), + ), ), - ), - ], + ], + ), ), - ),),onTap: (){ - Navigator.of(context) - .pushNamedAndRemoveUntil('/router/main_page', (route) => false,arguments: {"index":2}); - },)); + ), + onTap: () { + Navigator.of(context).pushNamedAndRemoveUntil( + '/router/main_page', (route) => false, + arguments: {"index": 2}); + }, + )); } widgets.add(Container( @@ -154,7 +168,6 @@ class _SettlementOrderCommodity extends State { return widgets; } - Widget commodityItem(OrderProductVOList productList) { return Container( margin: EdgeInsets.only(top: 8.h, bottom: 8.h), @@ -173,7 +186,7 @@ class _SettlementOrderCommodity extends State { flex: 1, child: Container( margin: EdgeInsets.only( - left:8.w, + left: 8.w, ), // height: 44.h, child: Column( @@ -190,7 +203,9 @@ class _SettlementOrderCommodity extends State { color: Color(0xFF353535), ), ), - SizedBox(height: 4.h,), + SizedBox( + height: 4.h, + ), Text( productList.skuNameStr != null ? "${productList.skuNameStr ?? ""}" @@ -208,7 +223,6 @@ class _SettlementOrderCommodity extends State { color: Color(0xFF727272), ), ), - ], ), ), @@ -218,24 +232,26 @@ class _SettlementOrderCommodity extends State { crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( - S.of(context).yuan_(AppUtils.calculateDouble(double.tryParse(productList.sellPrice ?? "0") - double.tryParse(productList.discountAmount ?? "0"))), + productList.buyNum > 1 + ? S.of(context).yuan_(AppUtils.calculateDouble(double.tryParse(productList.sellPrice ?? "0") - AppUtils.stringAsFixedDouble2((double.tryParse(productList.discountAmount ?? "0") / productList.buyNum)))) + : S.of(context).yuan_(AppUtils.calculateDouble(double.tryParse(productList.sellPrice ?? "0") - double.tryParse(productList.discountAmount ?? "0"))), style: TextStyle( fontWeight: MyFontWeight.medium, fontSize: 14.sp, color: Color(0xFF4C4C4C), ), ), - if(productList.discountAmount != null) - Text( - S.of(context).yuan_(productList.sellPrice), - style: TextStyle( - fontWeight: MyFontWeight.regular, - fontSize: 12.sp, - fontFamily: 'JDZhengHT', - decoration: TextDecoration.lineThrough, - color: Color(0xFFA29E9E), - ), - ) + if (productList.discountAmount != null) + Text( + S.of(context).yuan_(productList.sellPrice), + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + fontFamily: 'JDZhengHT', + decoration: TextDecoration.lineThrough, + color: Color(0xFFA29E9E), + ), + ) ], ) ], @@ -403,13 +419,13 @@ class _SettlementOrderCommodity extends State { ); } - String countAllGoods(){ + String countAllGoods() { int count = 0; - if(widget.minOrderInfo != null){ + if (widget.minOrderInfo != null) { widget.minOrderInfo.orderProductVOList.forEach((element) { count += element.buyNum; }); - }else if(widget.settleOrderInfo != null){ + } else if (widget.settleOrderInfo != null) { widget.settleOrderInfo.orderProductList.forEach((element) { count += element.buyNum; }); @@ -450,7 +466,6 @@ class _SettlementOrderCommodity extends State { SizedBox( width: 15.w, ), - Container( child: Text( S.of(context).jiesuanjine, @@ -479,13 +494,16 @@ class _SettlementOrderCommodity extends State { ); } - String discountPrice(){ - if(widget.minOrderInfo != null){ - return AppUtils.calculateDouble(double.tryParse(widget.minOrderInfo?.couponSubPrice ?? "0") + double.tryParse(widget.settleOrderInfo?.benefitDiscountAmount ?? "0")); - }else if(widget.tableId < 0){ + String discountPrice() { + if (widget.minOrderInfo != null) { + return AppUtils.calculateDouble( + double.tryParse(widget.minOrderInfo?.couponSubPrice ?? "0") + + double.tryParse( + widget.settleOrderInfo?.benefitDiscountAmount ?? "0")); + } else if (widget.tableId < 0) { return "0"; - }else { - return widget?.settleOrderInfo?.discountAmount ?? "0"; + } else { + return widget?.settleOrderInfo?.discountAmount ?? "0"; } } diff --git a/lib/utils/flutter_utils.dart b/lib/utils/flutter_utils.dart index 4d6b7a61..9d061d16 100644 --- a/lib/utils/flutter_utils.dart +++ b/lib/utils/flutter_utils.dart @@ -17,6 +17,16 @@ class AppUtils { return "${numberFormat.format(mi / 1000)}"; } + ///保留两位小数 + static double stringAsFixedDouble2(double value) { + String valueStr = value.toString(); + if (!valueStr.contains(".")) return value; + if (valueStr.indexOf(".") + 3 >= valueStr.length) + return value; + else + return double.tryParse(valueStr.substring(0, valueStr.indexOf(".") + 3))??0; + } + ///版本号 static bool versionCompare(String localVersion, String serverVersion) { try { diff --git a/pubspec.yaml b/pubspec.yaml index 23a4247f..3bcbe75b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: 一心回乡. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 3.2.3+44 +version: 3.2.4+45 environment: sdk: ">=2.7.0 <3.0.0" From ee6e0f9724652b25168f253bb18eb4f5efed9824 Mon Sep 17 00:00:00 2001 From: wurong <953969641@qq.com> Date: Wed, 8 Mar 2023 11:35:51 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E6=B5=B7=E6=8A=A5=E5=BC=B9=E7=AA=97-?= =?UTF-8?q?=E6=96=B0=E4=BA=BA=E5=BC=B9=E7=AA=97=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/home/home_page.dart | 33 +++--- lib/retrofit/min_api.dart | 2 +- lib/retrofit/retrofit_api.dart | 2 +- lib/view_widget/activity_poster.dart | 139 ++++++++++++++----------- lib/view_widget/new_people_reward.dart | 2 +- 5 files changed, 95 insertions(+), 83 deletions(-) diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart index 8973c95c..a984a42e 100644 --- a/lib/home/home_page.dart +++ b/lib/home/home_page.dart @@ -81,9 +81,9 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { widget.interviewCouponList != null && widget.interviewCouponList.length > 0) showInvite = true; - if (widget.firstLoginCouponList != null && widget.firstLoginCouponList.length > 0) - showNew = true; - + //判断新人弹窗 + // if (widget.firstLoginCouponList != null && widget.firstLoginCouponList.length > 0) + // showNew = true; } @@ -98,19 +98,8 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { ); } - ///新用户奖励弹窗 - newShowAlertDialog(newUserCouponList) { - //显示对话框 - showDialog( - context: context, - builder: (BuildContext context) { - return NewPeopleReward(newUserCouponList); - }, - ); - } - ///活动海报弹窗 - posterShowAlertDialog(ActivityPos activityPos) { + posterShowAlertDialog(ActivityPos activityPos,firstLoginCouponList) { var today = DateTime.now().day; SharedPreferences.getInstance().then((value) { if(value.getInt("today")==today && (value.getString("ActivityPosCode") ?? "").contains("${activityPos.code}_${value.getString("userId")};")) @@ -121,7 +110,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { showDialog( context: context, builder: (BuildContext context) { - return ActivityPoster(activityPos); + return ActivityPoster(activityPos,firstLoginCouponList); }, ); }); @@ -283,10 +272,12 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { inviteShowAlertDialog(widget.invite, widget.interviewCouponList[0]); showInvite = false; } - if (showNew) { - newShowAlertDialog(widget.firstLoginCouponList); - showNew = false; - } + + //判断新人弹窗 + // if (showNew) { + // newShowAlertDialog(widget.firstLoginCouponList); + // showNew = false; + // } } queryUserBalance() async { @@ -337,7 +328,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin { }); if (baseData != null && baseData.isSuccess) { if(baseData.data?.enabled ?? true) - posterShowAlertDialog(baseData.data); + posterShowAlertDialog(baseData.data,widget.firstLoginCouponList); } } diff --git a/lib/retrofit/min_api.dart b/lib/retrofit/min_api.dart index 1308a39d..f7e60731 100644 --- a/lib/retrofit/min_api.dart +++ b/lib/retrofit/min_api.dart @@ -26,7 +26,7 @@ import 'data/shopping_home_config.dart'; part 'min_api.g.dart'; -const localBaseUrl = "https://pos.api.lotus-wallet.com/app/";///本地 +const localBaseUrl = "http://192.168.10.78:8765/app/";///本地 // const localBaseUrl = "https://2946-27-19-77-115.jp.ngrok.io/app/";///本地 const serviceBaseUrl = "https://pos.api.lotus-wallet.com/app/";///线上 diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index 57d5221c..7b1581b7 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -64,7 +64,7 @@ import 'data/wx_pay.dart'; part 'retrofit_api.g.dart'; -const localBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///本地 +const localBaseUrl = "http://192.168.10.78:8766/app/";///本地 // const localBaseUrl = "https://2946-27-19-77-115.jp.ngrok.io/app/";///本地 const serviceBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///线上 diff --git a/lib/view_widget/activity_poster.dart b/lib/view_widget/activity_poster.dart index 45b0b334..9500d023 100644 --- a/lib/view_widget/activity_poster.dart +++ b/lib/view_widget/activity_poster.dart @@ -1,17 +1,18 @@ - - import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:huixiang/retrofit/data/activity_pos.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../retrofit/data/login_info.dart'; import 'custom_image.dart'; +import 'new_people_reward.dart'; class ActivityPoster extends StatefulWidget { final ActivityPos activityPos; + final List firstLoginCouponList; - ActivityPoster(this.activityPos); + ActivityPoster(this.activityPos, this.firstLoginCouponList); @override State createState() { @@ -20,58 +21,81 @@ class ActivityPoster extends StatefulWidget { } class _ActivityPoster extends State { + bool showNew = false; + + @override + void initState() { + super.initState(); + if (widget.firstLoginCouponList != null && + widget.firstLoginCouponList.length > 0) showNew = true; + } + @override Widget build(BuildContext context) { - return WillPopScope( + return WillPopScope( onWillPop: () async => false, - child:Container( - width: double.infinity, - alignment: Alignment.center, - margin: EdgeInsets.only( - left:27.w, - right:27.w, - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - GestureDetector( - onTap: (){ - jumpClick(widget.activityPos); - }, - child: - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - ), - child:MImage( - widget?.activityPos?.showImage ?? "", - aspectRatio: 0.75, - fit: BoxFit.cover, - noCompress: true, - radius: BorderRadius.all(Radius.circular(12)), - errorSrc: "assets/image/default_1.webp", - fadeSrc: "assets/image/default_1.webp", - ),), + child: Container( + width: double.infinity, + alignment: Alignment.center, + margin: EdgeInsets.only( + left: 27.w, + right: 27.w, ), - Container( - margin: EdgeInsets.only(top:35.h,right: 8.w,bottom:8.w), - child:GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: (){ - Navigator.of(context).pop(); + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + jumpClick(widget.activityPos); }, - child: Image.asset( - "assets/image/yq_qx.webp", - width: 40, - height: 40, - fit: BoxFit.cover, - color: Colors.white, - ) - ) ) - ], - ), - )); + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + ), + child: MImage( + widget?.activityPos?.showImage ?? "", + aspectRatio: 0.75, + fit: BoxFit.cover, + noCompress: true, + radius: BorderRadius.all(Radius.circular(12)), + errorSrc: "assets/image/default_1.webp", + fadeSrc: "assets/image/default_1.webp", + ), + ), + ), + Container( + margin: EdgeInsets.only(top: 35.h, right: 8.w, bottom: 8.w), + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + Navigator.of(context).pop(); + if (showNew) { + newShowAlertDialog(widget.firstLoginCouponList); + showNew = false; + } + }, + child: Image.asset( + "assets/image/yq_qx.webp", + width: 40, + height: 40, + fit: BoxFit.cover, + color: Colors.white, + ))) + ], + ), + )); + } + + ///新用户奖励弹窗 + newShowAlertDialog(newUserCouponList) { + //显示对话框 + showDialog( + context: context, + builder: (BuildContext context) { + return NewPeopleReward(newUserCouponList); + }, + ); } /// contentType 跳转类型(0:不跳转,1:积分商品,2:活动,3:文章,4:页面跳转,5:课程) @@ -82,31 +106,28 @@ class _ActivityPoster extends State { arguments: {"goodsId": widget.activityPos.jumpUrl}); break; case 2: - Navigator.of(context) - .pushNamed('/router/web_page', arguments: { + Navigator.of(context).pushNamed('/router/web_page', arguments: { "activityId": widget.activityPos.jumpUrl, }); break; case 3: - Navigator.of(context) - .pushNamed('/router/web_page', arguments: { + Navigator.of(context).pushNamed('/router/web_page', arguments: { "articleId": widget.activityPos.jumpUrl, }); break; case 4: String router = widget.activityPos.jumpUrl; + // String router = "/router/store_order?{\"id\":\"1333246101343436800\",\"tenant\":\"1175\",\"storeName\":\"海峡姐妹茶(汉街店)\"}"; if (router.contains("?")) { - String params = router.substring(router.indexOf("?")); - params = params.replaceAll("?", ""); + String params = router.substring(router.indexOf("?")+1); Map map = jsonDecode(params); - Navigator.of(context).pushNamed(router, arguments: map); + Navigator.of(context).pushNamed(router.substring(0,router.indexOf("?")), arguments: map); } else { Navigator.of(context).pushNamed(router); } break; case 5: - Navigator.of(context) - .pushNamed('/router/class_details', arguments: { + Navigator.of(context).pushNamed('/router/class_details', arguments: { "id": widget.activityPos.jumpUrl, }); break; diff --git a/lib/view_widget/new_people_reward.dart b/lib/view_widget/new_people_reward.dart index 7acf376d..ad29fd59 100644 --- a/lib/view_widget/new_people_reward.dart +++ b/lib/view_widget/new_people_reward.dart @@ -42,7 +42,7 @@ class _NewPeopleReward extends State { GestureDetector( onTap: () { Navigator.of(context).pop(); - SmartDialog.showToast("领取成功"); + SmartDialog.showToast("领取成功",alignment: Alignment.center); }, child: Container( margin: EdgeInsets.only( From 07654c9b423ebb37982fd7199920846079ae95ec Mon Sep 17 00:00:00 2001 From: wurong <953969641@qq.com> Date: Wed, 15 Mar 2023 14:38:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?1.=E5=AE=9A=E4=BD=8D=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9B=202.=E7=81=AB=E9=94=85=E5=BA=97?= =?UTF-8?q?=E5=A5=97=E9=A4=90=E4=B8=8B=E5=8D=95=E6=9B=B4=E6=94=B9=EF=BC=9B?= =?UTF-8?q?=203.=E7=81=AB=E9=94=85=E4=B8=8B=E5=8D=95vip=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=EF=BC=9B=204.=E9=97=A8=E5=BA=97=E5=88=97=E8=A1=A8=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E9=94=AE=E7=9B=98=E4=BC=98=E5=8C=96=EF=BC=9B=205.?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=E4=BC=98=E5=8C=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main_page.dart | 1 + lib/mine/mine_page.dart | 43 +++--- lib/order/order_detail_page.dart | 6 +- lib/order/order_history_page.dart | 5 +- lib/retrofit/data/order_product_vo.dart | 9 ++ lib/retrofit/data/shoppingCart.dart | 132 +++++++++--------- lib/settlement/settlement.dart | 9 +- .../activity_coupon_remarks.dart | 2 +- lib/union/location_map_page.dart | 3 +- lib/union/union_list.dart | 1 + lib/utils/location.dart | 62 ++++++++ lib/view_widget/new_coupon_widget.dart | 5 +- pubspec.yaml | 2 +- 13 files changed, 189 insertions(+), 91 deletions(-) diff --git a/lib/main_page.dart b/lib/main_page.dart index 331f2662..85b3f8e2 100644 --- a/lib/main_page.dart +++ b/lib/main_page.dart @@ -161,6 +161,7 @@ class _MainPage extends State with WidgetsBindingObserver { queryUserInfo(); + ///App自动更新 appAutoUpdate(); } final XgFlutterPlugin xgFlutterPlugin = XgFlutterPlugin(); diff --git a/lib/mine/mine_page.dart b/lib/mine/mine_page.dart index 04157479..51996486 100644 --- a/lib/mine/mine_page.dart +++ b/lib/mine/mine_page.dart @@ -78,6 +78,7 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin { super.initState(); querySocialInfo(); queryMsgStats(); + queryCoupon(); // queryCard(); eventBus.on().listen((event) { @@ -118,22 +119,6 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin { ranks.addAll(rankData.data); } - BaseData> baseData = await apiService.queryCard({ - "centre": true, - "pageNum": 1, - "pageSize": 10, - "searchKey": "", - "state": 1 - }).catchError((error) { - _refreshController.refreshFailed(); - }); - if (baseData != null && baseData.isSuccess) { - couponNum = baseData.data.total; - _refreshController.refreshCompleted(); - } else { - _refreshController.refreshFailed(); - } - BaseData baseDate = await apiService.queryInfo().catchError((onError) { _refreshController.refreshFailed(); @@ -152,8 +137,34 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin { // EasyLoading.dismiss(); } + queryCoupon()async{ + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + showLoading: false, + ); + BaseData> baseData = await apiService.queryCard({ + "centre": true, + "pageNum": 1, + "pageSize": 10, + "searchKey": "", + "state": 1 + }).catchError((error) { + _refreshController.refreshFailed(); + }); + if (baseData != null && baseData.isSuccess) { + couponNum = baseData.data.total; + _refreshController.refreshCompleted(); + } else { + _refreshController.refreshFailed(); + } + } + _onRefresh() { // queryUserInfo(); + queryCoupon(); querySocialInfo(); queryMsgStats(); } diff --git a/lib/order/order_detail_page.dart b/lib/order/order_detail_page.dart index db277842..b12aefda 100644 --- a/lib/order/order_detail_page.dart +++ b/lib/order/order_detail_page.dart @@ -119,6 +119,8 @@ class _OrderDetailPage extends State { setState(() { statusTitle(); }); + }else{ + SmartDialog.showToast(baseData.msg,alignment: Alignment.center); } } @@ -172,7 +174,7 @@ class _OrderDetailPage extends State { ), ///订单取货地址,或, 收货地址 - if(orderInfo != null) + if(orderInfo != null && orderInfo.addressExt != null) OrderAddress( orderStatus, isTakeOut, @@ -521,6 +523,8 @@ class _OrderDetailPage extends State { // Future.delayed(Duration(milliseconds:450), () { queryDetails(); // }); + }else{ + SmartDialog.showToast(baseData.msg,alignment: Alignment.center); } } diff --git a/lib/order/order_history_page.dart b/lib/order/order_history_page.dart index 84d4ac59..c65f5708 100644 --- a/lib/order/order_history_page.dart +++ b/lib/order/order_history_page.dart @@ -364,7 +364,7 @@ class _OrderHistoryList extends State ], ), Container( - margin: EdgeInsets.only(left: 12.w), + margin: EdgeInsets.only(left: 12.w,top:3.h), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -614,6 +614,9 @@ class _OrderHistoryList extends State if (baseData != null && baseData.isSuccess) { SmartDialog.showToast("订单取消成功"); _onRefresh(); + }else{ + if(baseData.msg != null) + SmartDialog.showToast(baseData.msg,alignment: Alignment.center); } } diff --git a/lib/retrofit/data/order_product_vo.dart b/lib/retrofit/data/order_product_vo.dart index bb4c5b53..b0c75db1 100644 --- a/lib/retrofit/data/order_product_vo.dart +++ b/lib/retrofit/data/order_product_vo.dart @@ -1,3 +1,5 @@ +import 'package:huixiang/retrofit/data/shoppingCart.dart'; + class OrderProductVOList { OrderProductVOList({ ActInfo actInfo, @@ -17,6 +19,7 @@ class OrderProductVOList { String skuId, String skuImg, String skuNameStr, + List setMealDataList }) { this.actInfo = actInfo; this.additionalComment = additionalComment; @@ -35,6 +38,7 @@ class OrderProductVOList { this.skuId = skuId; this.skuImg = skuImg; this.skuNameStr = skuNameStr; + this.setMealDataList = setMealDataList; } OrderProductVOList.fromJson(dynamic json) { @@ -59,6 +63,9 @@ class OrderProductVOList { this.skuId = json['skuId']; this.skuImg = json['skuImg']; this.skuNameStr = json['skuNameStr']; + this.setMealDataList = []..addAll( + (json['setMealDataList'] as List ?? []) + .map((o) => SetMealDataList.fromJson(o))); } ActInfo actInfo; @@ -78,6 +85,7 @@ class OrderProductVOList { String skuId; String skuImg; String skuNameStr; + List setMealDataList; Map toJson() { @@ -105,6 +113,7 @@ class OrderProductVOList { map['skuId'] = this.skuId; map['skuImg'] = this.skuImg; map['skuNameStr'] = this.skuNameStr; + map['setMealDataList']=this.setMealDataList; return map; } diff --git a/lib/retrofit/data/shoppingCart.dart b/lib/retrofit/data/shoppingCart.dart index 2322df3c..489fd961 100644 --- a/lib/retrofit/data/shoppingCart.dart +++ b/lib/retrofit/data/shoppingCart.dart @@ -18,8 +18,8 @@ class ShoppingCart { int selectDiscount; String storeName; String tableId; - List promotionInfoList; - List couponList; + List promotionInfoList; + List couponList; static ShoppingCart fromJson(Map map) { if (map == null) return null; @@ -35,10 +35,10 @@ class ShoppingCart { shoppingCartBean.selectDiscount = map['selectDiscount']; shoppingCartBean.tableId = map['tableId']; shoppingCartBean.promotionInfoList = List()..addAll( - (map['promotionInfoList'] as List ?? []).map((o) => PromotionInfoListBean.fromJson(o)) + (map['promotionInfoList'] as List ?? []).map((o) => PromotionInfoListBeans.fromJson(o)) ); shoppingCartBean.couponList = List()..addAll( - (map['couponList'] as List ?? []).map((o) => CouponListBean.fromJson(o)) + (map['couponList'] as List ?? []).map((o) => CouponListBeans.fromJson(o)) ); return shoppingCartBean; } @@ -308,7 +308,7 @@ class ProductInfoList { /// isMaxPromotion : true /// promotionProuctList : null -class PromotionInfoListBean { +class PromotionInfoListBeans { String id; String createTime; String createUser; @@ -339,43 +339,43 @@ class PromotionInfoListBean { bool isMaxPromotion; dynamic promotionProuctList; - static PromotionInfoListBean fromJson(Map map) { + static PromotionInfoListBeans fromJson(Map map) { if (map == null) return null; - PromotionInfoListBean promotionInfoListBean = PromotionInfoListBean(); - promotionInfoListBean.id = map['id']; - promotionInfoListBean.createTime = map['createTime']; - promotionInfoListBean.createUser = map['createUser']; - promotionInfoListBean.updateTime = map['updateTime']; - promotionInfoListBean.updateUser = map['updateUser']; - promotionInfoListBean.storeId = map['storeId']; - promotionInfoListBean.name = map['name']; - promotionInfoListBean.image = map['image']; - promotionInfoListBean.description = map['description']; - promotionInfoListBean.status = map['status']; - promotionInfoListBean.applyStartTime = map['applyStartTime']; - promotionInfoListBean.applyEndTime = map['applyEndTime']; - promotionInfoListBean.activityStartTime = map['activityStartTime']; - promotionInfoListBean.activityEndTime = map['activityEndTime']; - promotionInfoListBean.doStartTime = map['doStartTime']; - promotionInfoListBean.doEndTime = map['doEndTime']; - promotionInfoListBean.isNeedSecurityDeposit = map['isNeedSecurityDeposit']; - promotionInfoListBean.securityDeposit = map['securityDeposit']; - promotionInfoListBean.tag = map['tag']; - promotionInfoListBean.promotionType = map['promotionType']; - promotionInfoListBean.promotionPlan = map['promotionPlan']; - promotionInfoListBean.promotionDetail = List()..addAll( + PromotionInfoListBeans promotionInfoListBeans = PromotionInfoListBeans(); + promotionInfoListBeans.id = map['id']; + promotionInfoListBeans.createTime = map['createTime']; + promotionInfoListBeans.createUser = map['createUser']; + promotionInfoListBeans.updateTime = map['updateTime']; + promotionInfoListBeans.updateUser = map['updateUser']; + promotionInfoListBeans.storeId = map['storeId']; + promotionInfoListBeans.name = map['name']; + promotionInfoListBeans.image = map['image']; + promotionInfoListBeans.description = map['description']; + promotionInfoListBeans.status = map['status']; + promotionInfoListBeans.applyStartTime = map['applyStartTime']; + promotionInfoListBeans.applyEndTime = map['applyEndTime']; + promotionInfoListBeans.activityStartTime = map['activityStartTime']; + promotionInfoListBeans.activityEndTime = map['activityEndTime']; + promotionInfoListBeans.doStartTime = map['doStartTime']; + promotionInfoListBeans.doEndTime = map['doEndTime']; + promotionInfoListBeans.isNeedSecurityDeposit = map['isNeedSecurityDeposit']; + promotionInfoListBeans.securityDeposit = map['securityDeposit']; + promotionInfoListBeans.tag = map['tag']; + promotionInfoListBeans.promotionType = map['promotionType']; + promotionInfoListBeans.promotionPlan = map['promotionPlan']; + promotionInfoListBeans.promotionDetail = List()..addAll( (map['promotionDetail'] as List ?? []).map((o) => PromotionDetailBean.fromJson(o)) ); - promotionInfoListBean.channels = List()..addAll( + promotionInfoListBeans.channels = List()..addAll( (map['channels'] as List ?? []).map((o) => o.toString()) ); - promotionInfoListBean.isVip = map['isVip']; - promotionInfoListBean.isDelete = map['isDelete']; - promotionInfoListBean.tenantCode = map['tenantCode']; - promotionInfoListBean.canPartake = map['canPartake']; - promotionInfoListBean.isMaxPromotion = map['isMaxPromotion']; - promotionInfoListBean.promotionProuctList = map['promotionProuctList']; - return promotionInfoListBean; + promotionInfoListBeans.isVip = map['isVip']; + promotionInfoListBeans.isDelete = map['isDelete']; + promotionInfoListBeans.tenantCode = map['tenantCode']; + promotionInfoListBeans.canPartake = map['canPartake']; + promotionInfoListBeans.isMaxPromotion = map['isMaxPromotion']; + promotionInfoListBeans.promotionProuctList = map['promotionProuctList']; + return promotionInfoListBeans; } Map toJson() => { @@ -437,7 +437,7 @@ class PromotionInfoListBean { /// isMaxCoupon:true /// productList : null -class CouponListBean { +class CouponListBeans { String id; String storeId; int bizType; @@ -466,35 +466,35 @@ class CouponListBean { bool isEx; - static CouponListBean fromJson(Map map) { + static CouponListBeans fromJson(Map map) { if (map == null) return null; - CouponListBean couponListBean = CouponListBean(); - couponListBean.id = map['id']; - couponListBean.storeId = map['storeId']; - couponListBean.bizType = map['bizType']; - couponListBean.fullAmount = map['fullAmount']; - couponListBean.discountAmount = map['discountAmount']; - couponListBean.fullNumber = map['fullNumber']; - couponListBean.discountPercent = map['discountPercent']; - couponListBean.bizId = map['bizId']; - couponListBean.publishStartTime = map['publishStartTime']; - couponListBean.publishEndTime = map['publishEndTime']; - couponListBean.useStartTime = map['useStartTime']; - couponListBean.useEndTime = map['useEndTime']; - couponListBean.promotionId = map['promotionId']; - couponListBean.mid = map['mid']; - couponListBean.couponId = map['couponId']; - couponListBean.receiveTime = map['receiveTime']; - couponListBean.useTime = map['useTime']; - couponListBean.status = map['status']; - couponListBean.tenantCode = map['tenantCode']; - couponListBean.type = map['type']; - couponListBean.promotionName = map['promotionName']; - couponListBean.usable = map['usable']; - couponListBean.allProduct = map['allProduct']; - couponListBean.isMaxCoupon = map['isMaxCoupon']; - couponListBean.productList = map['productList']; - return couponListBean; + CouponListBeans couponListBeans = CouponListBeans(); + couponListBeans.id = map['id']; + couponListBeans.storeId = map['storeId']; + couponListBeans.bizType = map['bizType']; + couponListBeans.fullAmount = map['fullAmount']; + couponListBeans.discountAmount = map['discountAmount']; + couponListBeans.fullNumber = map['fullNumber']; + couponListBeans.discountPercent = map['discountPercent']; + couponListBeans.bizId = map['bizId']; + couponListBeans.publishStartTime = map['publishStartTime']; + couponListBeans.publishEndTime = map['publishEndTime']; + couponListBeans.useStartTime = map['useStartTime']; + couponListBeans.useEndTime = map['useEndTime']; + couponListBeans.promotionId = map['promotionId']; + couponListBeans.mid = map['mid']; + couponListBeans.couponId = map['couponId']; + couponListBeans.receiveTime = map['receiveTime']; + couponListBeans.useTime = map['useTime']; + couponListBeans.status = map['status']; + couponListBeans.tenantCode = map['tenantCode']; + couponListBeans.type = map['type']; + couponListBeans.promotionName = map['promotionName']; + couponListBeans.usable = map['usable']; + couponListBeans.allProduct = map['allProduct']; + couponListBeans.isMaxCoupon = map['isMaxCoupon']; + couponListBeans.productList = map['productList']; + return couponListBeans; } Map toJson() => { diff --git a/lib/settlement/settlement.dart b/lib/settlement/settlement.dart index c6f656fd..23f86df5 100644 --- a/lib/settlement/settlement.dart +++ b/lib/settlement/settlement.dart @@ -33,11 +33,10 @@ import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/utils/min.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/round_button.dart'; -import 'package:huixiang/view_widget/tips_dialog.dart'; -import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../retrofit/data/shoppingCart.dart'; import '../view_widget/settlement_tips_dialog.dart'; class Settlement extends StatefulWidget { @@ -85,6 +84,7 @@ class _Settlement extends State { bool useVipPriceSelect = true; bool showVipTips = false; bool isRaiseChannel = false; + ShoppingCart shopCarGoods; @override void initState() { @@ -107,6 +107,8 @@ class _Settlement extends State { productSkuId = widget.arguments["productSkuId"]; count1 = widget.arguments["buyNum"]; productId = widget.arguments["productId"]; + shopCarGoods = widget.arguments["shoppingCart"]; + if (tableId == 0) { placeOrder = true; } @@ -516,6 +518,9 @@ class _Settlement extends State { placeOrderFirst.storeId = storeInfo.id; placeOrderFirst.subcribeTime = null; placeOrderFirst.tableId = "$tableId"; + for(int i = 0;i { mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.center, children: [ - if(!(widget?.settleOrderInfo?.isRaise ?? false) && (widget?.settleOrderInfo?.memberVO?.isVip ?? false)) + if( !(widget?.settleOrderInfo?.isRaise ?? false) && (widget?.settleOrderInfo?.memberVO?.isVip ?? false) && widget.placeOrder) Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, diff --git a/lib/union/location_map_page.dart b/lib/union/location_map_page.dart index 0f37fd49..cdc28cea 100644 --- a/lib/union/location_map_page.dart +++ b/lib/union/location_map_page.dart @@ -76,7 +76,8 @@ class _LocationMap extends State { leadingColor: Colors.black, ), body: Container( - child: BMFMapWidget( + //BMFMapWidget 组件会自动默认沾满全屏,并且挡住所有遮盖物 ,BMFTextureMapWidget不会强制遮盖其他控件。 + child: BMFTextureMapWidget( mapOptions: BMFMapOptions( center: BMFCoordinate( double.tryParse(widget.arguments["lat"]), diff --git a/lib/union/union_list.dart b/lib/union/union_list.dart index ee005ff7..a7d6c822 100644 --- a/lib/union/union_list.dart +++ b/lib/union/union_list.dart @@ -121,6 +121,7 @@ class _UnionList extends State { child: TextField( textInputAction: TextInputAction.search, onEditingComplete: () { + FocusScope.of(context).requestFocus(FocusNode()); widget.queryStore(editingController.text); }, controller: editingController, diff --git a/lib/utils/location.dart b/lib/utils/location.dart index 5dfa092b..f678878c 100644 --- a/lib/utils/location.dart +++ b/lib/utils/location.dart @@ -2,11 +2,15 @@ import 'dart:io'; import 'package:android_intent_plus/android_intent.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bmflocation/flutter_bmflocation.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/view_widget/request_permission.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'font_weight.dart'; + BaiduLocationAndroidOption initAndroidOptions() { BaiduLocationAndroidOption options = BaiduLocationAndroidOption( @@ -99,14 +103,18 @@ class Location { } return true; } else if (await Permission.location.isUndetermined) { + showAlertDialog(context); await Permission.location.request(); + Navigator.of(context).pop(); return false; } else { if (Platform.isIOS) { //去设置中心 requestDialog(context, locationCallback); } else { + showAlertDialog(context); await Permission.location.request(); + Navigator.of(context).pop(); } return false; } @@ -162,4 +170,58 @@ class Location { }, ); } + + ///定位权限说明弹窗 + showAlertDialog(context) { + //显示对话框 + showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + titlePadding: EdgeInsets.all(10), + backgroundColor: Colors.transparent, + elevation: 0, + alignment: Alignment.topCenter, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(6), + ), + children: [ + Container( + width: double.infinity, + height: 120.h, + padding: EdgeInsets.all(16), + decoration: new BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + child:Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "访问精确地理位置信息权限说明", + style: TextStyle( + fontSize: 15.sp, + fontWeight:MyFontWeight.regular, + color: Colors.black, + ), + ), + SizedBox(height: 3.h,), + Text( + "为了向您推荐附近的门店信息,推荐您在使用期间让我们使用位置信息,不授权该权限不影响app正常使用。", + style: TextStyle( + fontSize: 13.sp, + height: 1.3.h, + fontWeight:MyFontWeight.regular, + color: Colors.black, + ), + ), + ], + ), + ), + ], + ); + }, + ); + } + } diff --git a/lib/view_widget/new_coupon_widget.dart b/lib/view_widget/new_coupon_widget.dart index aa1b0b78..bd3cbc32 100644 --- a/lib/view_widget/new_coupon_widget.dart +++ b/lib/view_widget/new_coupon_widget.dart @@ -43,7 +43,7 @@ class NewCouponWidget extends StatelessWidget { // } return Container( - height: (coupon != null && coupon.isEx) ? 155.h : 135.h, + height: (coupon != null && coupon.isEx) ? 160.h : 140.h, width: double.infinity, margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h), padding: EdgeInsets.only(right: 5), @@ -83,11 +83,12 @@ class NewCouponWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "券名称:${coupon != null ? coupon.couponName ?? "" : ""}", + "${coupon != null ? coupon.couponName ?? "" : ""}", maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 15.sp, + height: 1.2.h, fontWeight: MyFontWeight.semi_bold, color: Color(0xFF0D0D0D), ), diff --git a/pubspec.yaml b/pubspec.yaml index 3bcbe75b..fd79f61e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: 一心回乡. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 3.2.4+45 +version: 3.2.4+48 environment: sdk: ">=2.7.0 <3.0.0" From 8332fdccb4c839b2ab06d98876e27f30db3f8652 Mon Sep 17 00:00:00 2001 From: wurong <953969641@qq.com> Date: Thu, 16 Mar 2023 14:35:27 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8A=A0=E6=AD=A3?= =?UTF-8?q?=E5=9C=A8=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/message/system_details.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/message/system_details.dart b/lib/message/system_details.dart index 8e4742e4..efdc1d6e 100644 --- a/lib/message/system_details.dart +++ b/lib/message/system_details.dart @@ -51,8 +51,7 @@ class _SystemDetails extends State { msgType = widget.arguments["msgType"]; SharedPreferences.getInstance().then((value) { - apiService = - ApiService(Dio(), token: value.getString("token"), context: context); + apiService = ApiService(Dio(), token: value.getString("token"),showLoading: true, context: context); queryMessage(); }); }