diff --git a/lib/home/huixiang_view/huixiang_banner.dart b/lib/home/huixiang_view/huixiang_banner.dart index f16bb3ce..de2aebd2 100644 --- a/lib/home/huixiang_view/huixiang_banner.dart +++ b/lib/home/huixiang_view/huixiang_banner.dart @@ -65,9 +65,6 @@ class _HuiXiangBanner extends State { /// contentType 跳转类型(0:不跳转,1:积分商品,2:活动,3:文章) bannerClick(BannerData bannerData) async { switch (bannerData.contentType) { - case 0: - Navigator.of(context).pushNamed('/router/qr_share'); - break; case 1: Navigator.of(context).pushNamed('/router/integral_store_page', arguments: {"goodsId": bannerData.content}); diff --git a/lib/integral/integral_page.dart b/lib/integral/integral_page.dart index f3fd613a..daabc11b 100644 --- a/lib/integral/integral_page.dart +++ b/lib/integral/integral_page.dart @@ -1,5 +1,4 @@ import 'dart:convert'; - import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -46,8 +45,8 @@ class _IntegralPage extends State { ); userInfo = UserInfo.fromJson(jsonDecode(value.getString("user"))); - BaseData> rankData = - await apiService.rankList().catchError((onError) {}); + BaseData> rankData = await apiService.rankList() + .catchError((onError) {}); if (rankData != null && rankData.isSuccess) { ranks.clear(); ranks.addAll(rankData.data); diff --git a/lib/integral/intergra_view/integral_task.dart b/lib/integral/intergra_view/integral_task.dart index 554fd739..d8156b84 100644 --- a/lib/integral/intergra_view/integral_task.dart +++ b/lib/integral/intergra_view/integral_task.dart @@ -6,6 +6,7 @@ import 'package:huixiang/retrofit/data/sign_info.dart'; import 'package:huixiang/retrofit/data/task.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/view_widget/icon_text.dart'; import 'package:huixiang/view_widget/round_button.dart'; class IntegralTask extends StatefulWidget { @@ -60,7 +61,7 @@ class _IntegralTask extends State { Expanded( child: Container( child: ListView.builder( - padding: EdgeInsets.only(left: 10.w, top: 20.h), + padding: EdgeInsets.only(left: 10.w, top: 20.h), physics: NeverScrollableScrollPhysics(), // loop: false, // pagination: SwiperPagination( @@ -79,8 +80,8 @@ class _IntegralTask extends State { itemCount: (widget.signInfo != null && widget.signInfo.taskList != null && widget.signInfo.taskList.length > 0) - ? widget.signInfo.taskList.length : 0 - ), + ? widget.signInfo.taskList.length + : 0), ), flex: 1, ) @@ -182,21 +183,50 @@ class _IntegralTask extends State { ], ), ), - RoundButton( - text: task.limitDay == (task.complateNum ?? task.conplateNum) - ? S.of(context).yiwancheng - : S.of(context).quwancheng, - textColor: task.limitDay == (task.complateNum ?? task.conplateNum) - ? Color(0xFF808080) - : Colors.white, - backgroup: task.limitDay == (task.complateNum ?? task.conplateNum) - ? Color(0xFFF5F6FA) - : Color(0xFF32A060), - radius: 12.w, - fontSize: 12.sp, - fontWeight: MyFontWeight.semi_bold, - padding: EdgeInsets.symmetric(vertical: 4.h, horizontal: 12.w), - ), + task.limitDay == (task.complateNum ?? task.conplateNum) + ? RoundButton( + text: task.limitDay == (task.complateNum ?? task.conplateNum) + ? S.of(context).yiwancheng + : S.of(context).quwancheng, + textColor: + task.limitDay == (task.complateNum ?? task.conplateNum) + ? Color(0xFF808080) + : Colors.white, + backgroup: + task.limitDay == (task.complateNum ?? task.conplateNum) + ? Color(0xFFF5F6FA) + : Color(0xFF32A060), + radius: 12.w, + fontSize: 12.sp, + fontWeight: MyFontWeight.semi_bold, + padding: EdgeInsets.symmetric( + vertical: 4.h, + horizontal: 15.w, + ), + ) + : RoundButton( + text: "x10", + textColor: + task.limitDay == (task.complateNum ?? task.conplateNum) + ? Color(0xFF808080) + : Colors.white, + backgroup: + task.limitDay == (task.complateNum ?? task.conplateNum) + ? Color(0xFFF5F6FA) + : Color(0xFF32A060), + icons: Image.asset( + "assets/image/icon_gold_coin.png", + width: 16, + height: 16, + ), + radius: 12.w, + fontSize: 12.sp, + fontWeight: MyFontWeight.semi_bold, + padding: EdgeInsets.symmetric( + vertical: 4.h, + horizontal: 14.w, + ), + ), ], ), ); diff --git a/lib/mine/mine_view/mine_view.dart b/lib/mine/mine_view/mine_view.dart index 273764e2..1116b541 100644 --- a/lib/mine/mine_view/mine_view.dart +++ b/lib/mine/mine_view/mine_view.dart @@ -23,6 +23,7 @@ class MineView extends StatefulWidget { } class _MineView extends State { + @override Widget build(BuildContext context) { return Column( @@ -35,7 +36,7 @@ class _MineView extends State { children: [ InkWell( onTap: () { - toScan(); + // toScan(); }, child: Container( padding: EdgeInsets.all(8.h), diff --git a/lib/mine/mine_wallet_page.dart b/lib/mine/mine_wallet_page.dart index fdbe9446..c68fd63a 100644 --- a/lib/mine/mine_wallet_page.dart +++ b/lib/mine/mine_wallet_page.dart @@ -260,17 +260,19 @@ class _MineWalletPage extends State { padding: EdgeInsets.fromLTRB(24.w, 24.h, 24.w, 24.h), decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(8)), + borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, - ) + ), ], ), child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Stack( alignment: Alignment.center, @@ -280,9 +282,9 @@ class _MineWalletPage extends State { child: Text( S.of(context).zhanghuyue, style: TextStyle( - fontWeight: MyFontWeight.medium, + fontWeight: MyFontWeight.semi_bold, color: Color(0xFF353535), - fontSize: 16.sp, + fontSize: 20.sp, ), ), ), @@ -304,7 +306,7 @@ class _MineWalletPage extends State { color: Color(0xFF353535), fontSize: 12.sp, ), - ) + ), ], ), ), @@ -321,17 +323,17 @@ class _MineWalletPage extends State { fontSize: 50.sp, ), ), - SizedBox( - height: 4.h, - ), - Text( - S.of(context).keyongyue, - style: TextStyle( - color: Color(0xFF20662A), - fontSize: 16.sp, - fontWeight: MyFontWeight.regular - ), - ), + // SizedBox( + // height: 4.h, + // ), + // Text( + // S.of(context).keyongyue, + // style: TextStyle( + // color: Color(0xFF20662A), + // fontSize: 16.sp, + // fontWeight: MyFontWeight.regular + // ), + // ), SizedBox( height: 24.h, ), diff --git a/lib/order/order_detail_page.dart b/lib/order/order_detail_page.dart index c1e48cb9..0af14f70 100644 --- a/lib/order/order_detail_page.dart +++ b/lib/order/order_detail_page.dart @@ -2,6 +2,10 @@ import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/order/order_view/order_address.dart'; +import 'package:huixiang/order/order_view/order_commodity.dart'; +import 'package:huixiang/order/order_view/order_info.dart'; +import 'package:huixiang/order/order_view/order_status.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/order_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; @@ -79,221 +83,100 @@ class _OrderDetailPage extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: MyAppBar( - title: title ?? S.of(context).jinxingzhongdedingdan, - titleColor: Colors.white, - background: Color(0xFF3A405A), - leadingColor: Colors.white, - toolbarHeight: (orderStatus >= 4 ? 118.h : 118.h) + - MediaQuery.of(context).padding.top + - kToolbarHeight, - brightness: Brightness.dark, - bottom: PreferredSize( - preferredSize: Size(double.infinity, orderStatus >= 4 ? 118.h : 118), + return Stack( + children: [ + Positioned( + top: 0, + left: 0, + right: 0, child: Container( + height: (orderStatus >= 4 ? 118.h : 118.h) + + MediaQuery.of(context).padding.top + + kToolbarHeight + + 48.h, color: Color(0xFF3A405A), - height: orderStatus >= 4 ? 118.h : 118.h, - padding: EdgeInsets.fromLTRB(16.w, 0, 16.w, 10.h), - child: Column( - children: [ - Visibility( - visible: center != null && center != "", - child: Container( - child: IconText( - (center != null && center != "") ? center : "", - leftImage: "assets/image/icon_order_ok.png", - iconSize: 40.w, - textStyle: TextStyle( - fontSize: 24.sp, - fontWeight: FontWeight.bold, - color: Colors.white, - ), - ), - ), - ), - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - RoundButton( - text: isTakeOut == 0 - ? S.of(context).ziqu - : isTakeOut == 1 - ? S.of(context).waimai - : S.of(context).kuaidi, - width: 42.w * AppUtils.textScale(context), - height: 20.h * AppUtils.textScale(context), - textColor: Colors.white, - fontSize: 12.sp, - padding: EdgeInsets.fromLTRB(8.w, 1.h, 8.w, 1.h), - backgroup: Color(0xFF32A060), - radius: 15.w, - ), - Text( - title, - style: TextStyle( - color: Colors.white, - fontSize: 12.sp, - ), - ), - ], - ), - flex: 1, - ), - Visibility( - child: Container( - height: 33.h, - child: Row( - mainAxisSize: MainAxisSize.min, - children: timeWidget(), - ), - ), - visible: (orderStatus >= 4 || isTakeOut == 2) - ? false - : (isTakeOut == 0) - ? !(payStatus == 1) - : (isTakeOut == 1) - ? !(payStatus == 1 && - (sendStatus != 2 && sendStatus != 3)) - : !(payStatus == 1 && (sendStatus != 1)), - ), - ], - ), - flex: 1, - ), - ], - ), + width: MediaQuery.of(context).size.width, ), ), - ), - body: Container( - child: - /*Column( + Positioned( + child: Scaffold( + backgroundColor: Colors.transparent, + appBar: MyAppBar( + title: title ?? S.of(context).jinxingzhongdedingdan, + titleColor: Colors.transparent, + background: Colors.transparent, + leadingColor: Colors.white, + // toolbarHeight: (orderStatus >= 4 ? 118.h : 118.h) + + // MediaQuery.of(context).padding.top + + // kToolbarHeight, + brightness: Brightness.dark, + // bottom: PreferredSize( + // preferredSize: Size( + // double.infinity, + // orderStatus >= 4 ? 118.h : 118, + // ), + // child: + // ), + ), + body: Container( + child: + /*Column( children: [ Expanded( child:*/ - Stack( - children: [ - Positioned( - top: 0, - left: 0, - right: 0, - child: Container( - height: 36.h, - color: Color(0xFF3A405A), - ), - ), - SingleChildScrollView( - physics: BouncingScrollPhysics(), - child: Container( - child: Column( - children: [ - buildAddress(), - buildCommodity(), - // if (payStatus == 0) couponRemarks(), - /*(payStatus == 0) ? paySelector() : */ - buildOrderInfo(), - Container( - height: 42.h, - ), - ], + SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Container( + child: Column( + children: [ + ///订单状态显示 + OrderStatus(orderStatus, isTakeOut, sendStatus, payStatus, + refundStatus, title, center, orderInfo), + + ///订单取货地址,或, 收货地址 + OrderAddress( + orderStatus, + isTakeOut, + sendStatus, + payStatus, + refundStatus, + title, + center, + _orderCancel, + orderInfo), + + ///订单商品 + OrderCommodity(orderInfo), + // if (payStatus == 0) couponRemarks(), + /*(payStatus == 0) ? paySelector() : */ + + ///显示订单信息 + OrderInfoView(orderInfo), + + Container( + height: 42.h, + ), + ], + ), ), ), + // flex: 1, + // ), + // if (payStatus == 0) + // bottomPay(), + // ], + // ), ), - ], - ), - // flex: 1, - // ), - // if (payStatus == 0) - // bottomPay(), - // ], - // ), - ), + ), + left: 0, + right: 0, + top: 0, + bottom: 0, + ) + ], ); } - List timeWidget() { - if (orderInfo == null) return []; - String hour = ""; - String minute = ""; - if (payStatus == 0) { - String hourMinute = AppUtils.getHourMinuteAfter30mByString( - (orderInfo != null) ? orderInfo.createTime : ""); - var hourMinutes = hourMinute.split(":"); - hour = hourMinutes[0]; - minute = hourMinutes[1]; - } else { - if (isTakeOut == 0) { - } else if (isTakeOut == 1) { - if (sendStatus == 2 || sendStatus == 3) { - String hourMinute = AppUtils.getHourMinuteByString( - (orderInfo != null && orderInfo.orderDetail != null) - ? orderInfo.orderDetail.predictTime - : ""); - var hourMinutes = hourMinute.split(":"); - hour = hourMinutes[0]; - minute = hourMinutes[1]; - } - } else if (isTakeOut == 2) { - // if (sendStatus == 1) { - // String hourMinute = AppUtils.getHourMinuteByString( - // (orderInfo != null && orderInfo.orderDetail != null) - // ? orderInfo.orderDetail.predictTime - // : ""); - // var hourMinutes = hourMinute.split(":"); - // hour = hourMinutes[0]; - // minute = hourMinutes[1]; - // } - } - } - return [ - AspectRatio( - aspectRatio: 1, - child: BorderText( - text: hour, - textColor: Colors.white, - fontSize: 21.sp, - fontWeight: FontWeight.bold, - borderColor: Colors.white, - borderWidth: 1, - padding: EdgeInsets.all(2), - ), - ), - SizedBox( - width: 8.w, - ), - Text( - ":", - style: TextStyle( - color: Colors.white, - fontSize: 21.sp, - ), - ), - SizedBox( - width: 8.w, - ), - AspectRatio( - aspectRatio: 1, - child: BorderText( - text: minute, - textColor: Colors.white, - fontSize: 21.sp, - fontWeight: FontWeight.bold, - borderColor: Colors.white, - borderWidth: 1, - padding: EdgeInsets.all(2), - ), - ), - ]; - } - String title = ""; String center = ""; @@ -466,80 +349,6 @@ class _OrderDetailPage extends State { ); } - carryOnPay() async { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - content: Container( - width: MediaQuery.of(context).size.width - 84.w, - height: 140.h, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - "app暂不支持支付,\n请前往对应小程序处理", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - SizedBox( - height: 30.h, - ), - Row( - children: [ - Expanded( - child: InkWell( - child: BorderText( - text: "取消", - textColor: Color(0xFF32A060), - fontSize: 16.sp, - fontWeight: FontWeight.bold, - borderColor: Color(0xFF32A060), - radius: 4, - padding: EdgeInsets.all(12), - borderWidth: 1, - ), - onTap: () { - Navigator.of(context).pop(); - }, - ), - flex: 1, - ), - SizedBox( - width: 16.w, - ), - Expanded( - child: InkWell( - child: RoundButton( - text: "好的", - textColor: Colors.white, - radius: 4, - padding: EdgeInsets.all(12), - backgroup: Color(0xFF32A060), - fontSize: 16.sp, - fontWeight: FontWeight.bold, - ), - onTap: () { - Navigator.of(context).pop(); - }, - ), - flex: 1, - ), - ], - ), - ], - ), - ), - ); - }, - ); - } - Widget paySelector() { return Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 14.h, bottom: 2.h), @@ -632,214 +441,7 @@ class _OrderDetailPage extends State { ); } - Widget buildAddress() { - return Container( - margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 20.h, bottom: 2.h), - padding: EdgeInsets.all(20), - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(12), - offset: Offset(0, 3), - blurRadius: 14, - spreadRadius: 0, - ), - ], - borderRadius: BorderRadius.circular(8), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Image.asset( - "assets/image/icon_location_address.png", - width: 28.w, - height: 28.h, - ), - Text( - (orderInfo != null && orderInfo.addressExt != null) - ? (orderInfo.addressExt.recName ?? "") - : "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 14.sp, - color: Color(0xFF4C4C4C), - ), - ), - SizedBox( - width: 12.w, - ), - Expanded( - child: Text( - (orderInfo != null && orderInfo.addressExt != null) - ? (orderInfo.addressExt.recMobile ?? "") - : "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 14.sp, - color: Color(0xFF4C4C4C), - ), - ), - ), - Icon( - Icons.keyboard_arrow_right, - size: 16, - color: Colors.black, - ), - ], - ), - Container( - margin: EdgeInsets.only(left: 28.w), - child: Text( - (orderInfo != null && orderInfo.addressExt != null) - ? (orderInfo.addressExt.address ?? "") - : "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFA29E9E), - ), - ), - ), - Visibility( - visible: orderStatus < 5 && refundStatus == 0, - child: Container( - margin: EdgeInsets.only(top: 20.h, bottom: 16.h), - child: MySeparator( - width: 5.w, - height: 1.h, - color: Color(0xFFA29E9E), - ), - ), - ), - Visibility( - visible: orderStatus < 5 && refundStatus == 0, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - InkWell( - onTap: () { - if (payStatus == 0) { - orderCancel(); - } else if (payStatus < 4) { - SmartDialog.show( - widget: TextImageWidget( - "assets/image/icon_empty.png", - S.of(context).ruxutuikuanqingyumendianlianxi, - "", - S.of(context).zhidianmendian, - (open) { - if (open) { - String mobile = (orderInfo != null && - orderInfo.storeVO != null) - ? (orderInfo.storeVO.mobile ?? "") - : ""; - if (mobile != "") { - callMobile(mobile); - } - } - SmartDialog.dismiss(); - }, - leftText: S.of(context).quxiao, - width: MediaQuery.of(context).size.width - 30.w, - heightRatioWithWidth: 0.9, - ), - ); - } - }, - child: Container( - padding: EdgeInsets.all(5), - child: Column( - children: [ - Image.asset( - payStatus == 0 - ? "assets/image/icon_order_cancel.png" - : "assets/image/icon_request_refund.png", - width: 24.w, - height: 24.h, - fit: BoxFit.contain, - ), - SizedBox( - height: 8.h, - ), - Text( - payStatus == 0 - ? S.of(context).quxiaodingdan - : S.of(context).shenqingtuikuan, - style: TextStyle( - color: Color(0xFF353535), - fontSize: 12.sp, - ), - ), - ], - ), - ), - ), - GestureDetector( - onTap: () { - if (payStatus == 0) { - carryOnPay(); - } else { - String storeId = - (orderInfo != null && orderInfo.storeVO != null) - ? (orderInfo.storeVO.id ?? "") - : ""; - String storeName = - (orderInfo != null && orderInfo.storeVO != null) - ? (orderInfo.storeVO.storeName ?? "") - : ""; - aginOrder(storeId, storeName); - } - }, - child: Container( - padding: EdgeInsets.all(5), - child: Column( - children: [ - Image.asset( - payStatus == 0 - ? "assets/image/icon_order_renminbi.png" - : "assets/image/icon_order_agin.png", - width: 24.w, - height: 24.h, - fit: BoxFit.contain, - ), - SizedBox( - height: 8.h, - ), - Text( - payStatus == 0 - ? S.of(context).jixuzhifu - : S.of(context).zailaiyidan, - style: TextStyle( - color: Color(0xFF32A060), - fontSize: 12.sp, - ), - ), - ], - ), - ), - ), - ], - ), - ), - ], - ), - ); - } - - callMobile(mobile) async { - String url = "tel:$mobile"; - if (await canLaunch(url)) { - await launch(url); - } else { - throw 'Could not launch $url'; - } - } - - orderCancel() async { + _orderCancel() async { BaseData baseData = await apiService.orderCancel(widget.arguments["id"]); if (baseData != null && baseData.isSuccess) { SmartDialog.showToast("订单取消成功"); @@ -849,238 +451,6 @@ class _OrderDetailPage extends State { } } - aginOrder(storeId, storeName) { - Navigator.of(context).pushNamed('/router/union_detail_page', - arguments: {"id": storeId, "storeName": storeName}); - } - - Widget buildCommodity() { - return Stack( - alignment: Alignment.centerRight, - children: [ - Container( - margin: EdgeInsets.only( - left: 16.w, - right: 16.w, - top: 16.h, - bottom: 8.h, - ), - padding: EdgeInsets.only( - left: 20.w, - right: 20.w, - top: 12.h, - bottom: 12.h, - ), - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(12), - offset: Offset(0, 1), - blurRadius: 12, - spreadRadius: 0, - ) - ], - borderRadius: BorderRadius.circular(8), - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: commodityList(), - ), - ), - Visibility( - child: buildQrCode(), - visible: false, - ), - ], - ); - } - - List commodityList() { - if (orderInfo == null) return []; - List widgets = []; - if (orderInfo.productList != null) { - widgets - .addAll(orderInfo.productList.map((e) => commodityItem(e)).toList()); - } - widgets.add(SizedBox(height: 20.h)); - - if (orderInfo.isTakeOut != 0) { - // 配送费 - widgets.add(discountItem( - Color(0xFFFF7A1A), - orderInfo.isTakeOut == 1 - ? S.of(context).peisongfei - : S.of(context).yunfei, - "", - "+${orderInfo.postFee}")); - } - - if (orderInfo.orderDetail != null && - orderInfo.orderDetail.couponDTO != null) { - // 配送费 - widgets.add(discountItem( - Color(0xFF32A060), - S.of(context).youhuiquan, - orderInfo.orderDetail.couponDTO.name, - orderInfo.orderDetail.couponDTO.money)); - } - - if (orderInfo.storeVO != null && orderInfo.storeVO.couponVO != null) { - // widgets.add(discountItem(Color(0xFF32A060), - // orderInfo.storeVO.couponVO.storeName, - // S.of(context).huodongjianmianpeisongfei(orderInfo.storeVO.couponVO.discountAmount), - // orderInfo.storeVO.couponVO.f)); - // Color(0xFFFF7A1A) - } - widgets.add(Container( - margin: EdgeInsets.only( - top: 24.h, - bottom: 4.h, - ), - child: MySeparator( - height: 1, - width: 5.w, - color: Colors.grey, - ), - )); - widgets.add(buildTotalPrice()); - return widgets; - } - - Widget buildQrCode() { - return Container( - margin: EdgeInsets.only(right: 16.w), - child: Stack( - children: [ - Container( - width: 94.w, - height: 33.h, - margin: EdgeInsets.only(left: 12.w), - padding: EdgeInsets.only(left: 16.w), - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(25), - offset: Offset(0, 1), - blurRadius: 12, - spreadRadius: 0, - ) - ], - borderRadius: BorderRadius.only( - topLeft: Radius.circular(2), - bottomLeft: Radius.circular(2), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - S.of(context).qujianma, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 12.sp, - color: Colors.black, - ), - ), - Icon( - Icons.keyboard_arrow_right, - color: Colors.black, - size: 16, - ) - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 6.h, bottom: 6.h), - // padding: EdgeInsets.all(2), - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(25), - offset: Offset(0, 1), - blurRadius: 12, - spreadRadius: 0, - ) - ], - borderRadius: BorderRadius.circular(2), - ), - child: Icon( - Icons.qr_code, - size: 20, - color: Color(0xFF32A060), - ), - ), - ], - ), - ); - } - - Widget buildOrderInfo() { - return Container( - margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 8.h), - padding: - EdgeInsets.only(left: 20.w, right: 20.w, top: 12.h, bottom: 12.h), - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(12), - offset: Offset(0, 1), - blurRadius: 12, - spreadRadius: 0, - ) - ], - borderRadius: BorderRadius.circular(8), - ), - child: Column( - children: [ - orderInfoItem( - S.of(context).dingdanhao, orderInfo != null ? orderInfo.id : ""), - orderInfoItem(S.of(context).xiadanshijian, - orderInfo != null ? orderInfo.createTime : ""), - // orderInfoItem(S.of(context).peisongfangshi, orderInfo != null ? orderInfo.createTime : ""), - orderInfoItem( - S.of(context).beizhu, - orderInfo != null - ? orderInfo.notes ?? S.of(context).qingshurubeizhuyaoqiu - : S.of(context).qingshurubeizhuyaoqiu), - orderInfoItem(S.of(context).zhifufangshi, - orderInfo != null ? payChannel() : S.of(context).yue), - ], - ), - ); - } - - String payChannel() { - switch (orderInfo.payChannel) { - case 0: - return "现金支付"; - case 1: - return "微信支付"; - case 2: - return "支付宝支付"; - case 3: - return "商户会员余额支付"; - case 4: - return "平台会员余额支付"; - case 5: - return "美团买单"; - case 6: - return "饿了么支付"; - case 7: - return "扫呗支付"; - case 8: - return "微生活"; - case 9: - return "银联支付"; - } - return S.of(context).yue; - } - Widget orderInfoItem(leftText, rightText) { return Container( margin: EdgeInsets.only(top: 8.h, bottom: 8.h), @@ -1107,202 +477,8 @@ class _OrderDetailPage extends State { ), flex: 1, ), - // SizedBox( - // width: 16.w, - // ), - // Icon( - // Icons.keyboard_arrow_right, - // size: 16, - // color: Colors.black, - // ) - ], - ), - ); - } - - Widget commodityItem(ProductList productList) { - return Container( - margin: EdgeInsets.only(top: 8.h, bottom: 8.h), - child: Row( - children: [ - MImage( - productList.skuImg, - width: 44.w, - height: 44, - fit: BoxFit.cover, - errorSrc: "assets/image/default_1.png", - fadeSrc: "assets/image/default_1.png", - ), - Expanded( - flex: 1, - child: Container( - margin: EdgeInsets.only( - left: 16.w, - ), - height: 44.h, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - productList.productName, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 14.sp, - color: Color(0xFF353535), - ), - ), - Text( - "x${productList.buyNum}", - style: TextStyle( - fontSize: 12.sp, - color: Color(0xFF727272), - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 1, - child: Text( - productList.weight != null - ? "${productList.weight}kg" - : "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 12.sp, - color: Color(0xFFA29E9E), - ), - ), - ), - Text( - S.of(context).yuan_(productList.sellPrice), - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 12.sp, - color: Color(0xFF4C4C4C), - ), - ) - ], - ), - ], - ), - ), - ), - ], - ), - ); - } - - Widget discountItem(Color color, textName, condition, amount) { - return Container( - margin: EdgeInsets.only(top: 9.h, bottom: 9.h), - child: Row( - children: [ - Container( - padding: EdgeInsets.fromLTRB(4.w, 2.h, 4.w, 2.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(2)), - border: Border.all( - width: 1, - color: color, - style: BorderStyle.solid, - ), - ), - child: Text( - textName, - style: TextStyle( - fontSize: 10.sp, - color: color, - ), - ), - ), - SizedBox( - width: 27.w, - ), - Expanded( - child: Text( - condition ?? "", - style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFA29E9E), - ), - ), - flex: 1, - ), - Text( - S.of(context).yuan_("$amount"), - style: TextStyle( - fontSize: 12.sp, - color: color, - ), - ), - ], - ), - ); - } - - Widget buildTotalPrice() { - return Container( - margin: EdgeInsets.only(top: 7.h, bottom: 11.h), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.baseline, - textBaseline: TextBaseline.alphabetic, - children: [ - Expanded( - child: Text( - S.of(context).gongjijianshangpin( - (orderInfo != null && orderInfo.productList != null) - ? orderInfo.productList.length - : "0"), - style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFA29E9E), - ), - ), - flex: 1, - ), - Container( - child: Text( - S.of(context).jiesuanjine, - style: TextStyle( - fontSize: 10.sp, - color: Color(0xFF353535), - ), - ), - ), - SizedBox( - width: 5.w, - ), - Text( - totalPrice(), - textAlign: TextAlign.end, - style: TextStyle( - fontSize: 30.sp, - color: Color(0xFF32A060), - ), - ) ], ), ); } - - String totalPrice() { - if (orderInfo == null) return ""; - double totalPrice = (double.tryParse(orderInfo.orderSum) + - double.tryParse(orderInfo.postFee)); - if (orderInfo.orderDetail != null && - orderInfo.orderDetail.couponDTO != null) { - totalPrice -= double.tryParse(orderInfo.orderDetail.couponDTO.money); - } - return "$totalPrice"; - } } diff --git a/lib/order/order_view/order_address.dart b/lib/order/order_view/order_address.dart new file mode 100644 index 00000000..498aae6a --- /dev/null +++ b/lib/order/order_view/order_address.dart @@ -0,0 +1,330 @@ + + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/order_info.dart'; +import 'package:huixiang/view_widget/border_text.dart'; +import 'package:huixiang/view_widget/round_button.dart'; +import 'package:huixiang/view_widget/separator.dart'; +import 'package:huixiang/view_widget/text_image_dialog.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class OrderAddress extends StatefulWidget { + + + final int orderStatus; + final int isTakeOut; + final int sendStatus; + final int payStatus; + final int refundStatus; + final String title; + final String center; + final Function orderCancel; + final OrderInfo orderInfo; + + OrderAddress(this.orderStatus, this.isTakeOut, this.sendStatus, this.payStatus, this.refundStatus, this.title, this.center, this.orderCancel, this.orderInfo); + + + @override + State createState() { + return _OrderAddress(); + } + +} + +class _OrderAddress extends State { + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 20.h, bottom: 2.h), + padding: EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 3), + blurRadius: 14, + spreadRadius: 0, + ), + ], + borderRadius: BorderRadius.circular(8), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + "assets/image/icon_location_address.png", + width: 28.w, + height: 28.h, + ), + Text( + (widget.orderInfo != null && widget.orderInfo.addressExt != null) + ? ((widget.isTakeOut == 0 + ? widget.orderInfo.storeName + : widget.orderInfo.addressExt.recName) ?? + "") + : "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF4C4C4C), + ), + ), + SizedBox( + width: 12.w, + ), + Expanded( + child: Text( + (widget.orderInfo != null && widget.orderInfo.addressExt != null) + ? (widget.orderInfo.addressExt.recMobile ?? "") + : "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF4C4C4C), + ), + ), + ), + Icon( + Icons.keyboard_arrow_right, + size: 16, + color: Colors.black, + ), + ], + ), + Container( + margin: EdgeInsets.only(left: 28.w), + child: Text( + (widget.orderInfo != null && widget.orderInfo.addressExt != null) + ? (widget.orderInfo.addressExt.address ?? "") + : "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 10.sp, + color: Color(0xFFA29E9E), + ), + ), + ), + Visibility( + visible: widget.orderStatus < 5 && widget.refundStatus == 0, + child: Container( + margin: EdgeInsets.only(top: 20.h, bottom: 16.h), + child: MySeparator( + width: 5.w, + height: 1.h, + color: Color(0xFFA29E9E), + ), + ), + ), + Visibility( + visible: widget.orderStatus < 5 && widget.refundStatus == 0, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + InkWell( + onTap: () { + if (widget.payStatus == 0) { + widget.orderCancel(); + } else if (widget.payStatus < 4) { + SmartDialog.show( + widget: TextImageWidget( + "assets/image/icon_empty.png", + S.of(context).ruxutuikuanqingyumendianlianxi, + "", + S.of(context).zhidianmendian, + (open) { + if (open) { + String mobile = (widget.orderInfo != null && + widget.orderInfo.storeVO != null) + ? (widget.orderInfo.storeVO.mobile ?? "") + : ""; + if (mobile != "") { + callMobile(mobile); + } + } + SmartDialog.dismiss(); + }, + leftText: S.of(context).quxiao, + width: MediaQuery.of(context).size.width - 30.w, + heightRatioWithWidth: 0.9, + ), + ); + } + }, + child: Container( + padding: EdgeInsets.all(5), + child: Column( + children: [ + Image.asset( + widget.payStatus == 0 + ? "assets/image/icon_order_cancel.png" + : "assets/image/icon_request_refund.png", + width: 24.w, + height: 24.h, + fit: BoxFit.contain, + ), + SizedBox( + height: 8.h, + ), + Text( + widget.payStatus == 0 + ? S.of(context).quxiaodingdan + : S.of(context).shenqingtuikuan, + style: TextStyle( + color: Color(0xFF353535), + fontSize: 12.sp, + ), + ), + ], + ), + ), + ), + GestureDetector( + onTap: () { + if (widget.payStatus == 0) { + carryOnPay(); + } else { + String storeId = + (widget.orderInfo != null && widget.orderInfo.storeVO != null) + ? (widget.orderInfo.storeVO.id ?? "") + : ""; + String storeName = + (widget.orderInfo != null && widget.orderInfo.storeVO != null) + ? (widget.orderInfo.storeVO.storeName ?? "") + : ""; + aginOrder(storeId, storeName); + } + }, + child: Container( + padding: EdgeInsets.all(5), + child: Column( + children: [ + Image.asset( + widget.payStatus == 0 + ? "assets/image/icon_order_renminbi.png" + : "assets/image/icon_order_agin.png", + width: 24.w, + height: 24.h, + fit: BoxFit.contain, + ), + SizedBox( + height: 8.h, + ), + Text( + widget.payStatus == 0 + ? S.of(context).jixuzhifu + : S.of(context).zailaiyidan, + style: TextStyle( + color: Color(0xFF32A060), + fontSize: 12.sp, + ), + ), + ], + ), + ), + ), + ], + ), + ), + ], + ), + ); + } + + + callMobile(mobile) async { + String url = "tel:$mobile"; + if (await canLaunch(url)) { + await launch(url); + } else { + throw 'Could not launch $url'; + } + } + + aginOrder(storeId, storeName) { + Navigator.of(context).pushNamed('/router/union_detail_page', + arguments: {"id": storeId, "storeName": storeName}); + } + + carryOnPay() async { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + content: Container( + width: MediaQuery.of(context).size.width - 84.w, + height: 140.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "app暂不支持支付,\n请前往对应小程序处理", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + SizedBox( + height: 30.h, + ), + Row( + children: [ + Expanded( + child: InkWell( + child: BorderText( + text: "取消", + textColor: Color(0xFF32A060), + fontSize: 16.sp, + fontWeight: FontWeight.bold, + borderColor: Color(0xFF32A060), + radius: 4, + padding: EdgeInsets.all(12), + borderWidth: 1, + ), + onTap: () { + Navigator.of(context).pop(); + }, + ), + flex: 1, + ), + SizedBox( + width: 16.w, + ), + Expanded( + child: InkWell( + child: RoundButton( + text: "好的", + textColor: Colors.white, + radius: 4, + padding: EdgeInsets.all(12), + backgroup: Color(0xFF32A060), + fontSize: 16.sp, + fontWeight: FontWeight.bold, + ), + onTap: () { + Navigator.of(context).pop(); + }, + ), + flex: 1, + ), + ], + ), + ], + ), + ), + ); + }, + ); + } + + +} \ No newline at end of file diff --git a/lib/order/order_view/order_commodity.dart b/lib/order/order_view/order_commodity.dart new file mode 100644 index 00000000..eb479e71 --- /dev/null +++ b/lib/order/order_view/order_commodity.dart @@ -0,0 +1,378 @@ + + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/order_info.dart'; +import 'package:huixiang/view_widget/custom_image.dart'; +import 'package:huixiang/view_widget/separator.dart'; + +class OrderCommodity extends StatefulWidget { + + + final OrderInfo orderInfo; + + OrderCommodity(this.orderInfo); + + @override + State createState() { + return _OrderCommodity(); + } + +} + +class _OrderCommodity extends State { + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.centerRight, + children: [ + Container( + margin: EdgeInsets.only( + left: 16.w, + right: 16.w, + top: 16.h, + bottom: 8.h, + ), + padding: EdgeInsets.only( + left: 20.w, + right: 20.w, + top: 12.h, + bottom: 12.h, + ), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 1), + blurRadius: 12, + spreadRadius: 0, + ), + ], + borderRadius: BorderRadius.circular(8), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: commodityList(), + ), + ), + Visibility( + child: buildQrCode(), + visible: false, + ), + ], + ); + } + + + List commodityList() { + if (widget.orderInfo == null) return []; + List widgets = []; + if (widget.orderInfo.productList != null) { + widgets + .addAll(widget.orderInfo.productList.map((e) => commodityItem(e)).toList()); + } + widgets.add(SizedBox(height: 20.h)); + + if (widget.orderInfo.isTakeOut != 0) { + // 配送费 + widgets.add(discountItem( + Color(0xFFFF7A1A), + widget.orderInfo.isTakeOut == 1 + ? S.of(context).peisongfei + : S.of(context).yunfei, + "", + "+${widget.orderInfo.postFee}")); + } + + if (widget.orderInfo.orderDetail != null && + widget.orderInfo.orderDetail.couponDTO != null) { + // 配送费 + widgets.add(discountItem( + Color(0xFF32A060), + S.of(context).youhuiquan, + widget.orderInfo.orderDetail.couponDTO.name, + widget.orderInfo.orderDetail.couponDTO.money)); + } + + if (widget.orderInfo.storeVO != null && widget.orderInfo.storeVO.couponVO != null) { + // widgets.add(discountItem(Color(0xFF32A060), + // orderInfo.storeVO.couponVO.storeName, + // S.of(context).huodongjianmianpeisongfei(orderInfo.storeVO.couponVO.discountAmount), + // orderInfo.storeVO.couponVO.f)); + // Color(0xFFFF7A1A) + } + widgets.add(Container( + margin: EdgeInsets.only( + top: 24.h, + bottom: 4.h, + ), + child: MySeparator( + height: 1, + width: 5.w, + color: Colors.grey, + ), + )); + widgets.add(buildTotalPrice()); + return widgets; + } + + Widget commodityItem(ProductList productList) { + return Container( + margin: EdgeInsets.only(top: 8.h, bottom: 8.h), + child: Row( + children: [ + MImage( + productList.skuImg, + width: 44.w, + height: 44, + fit: BoxFit.cover, + errorSrc: "assets/image/default_1.png", + fadeSrc: "assets/image/default_1.png", + ), + Expanded( + flex: 1, + child: Container( + margin: EdgeInsets.only( + left: 16.w, + ), + height: 44.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + productList.productName, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14.sp, + color: Color(0xFF353535), + ), + ), + Text( + "x${productList.buyNum}", + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFF727272), + ), + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 1, + child: Text( + productList.weight != null + ? "${productList.weight}kg" + : "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFFA29E9E), + ), + ), + ), + Text( + S.of(context).yuan_(productList.sellPrice), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 12.sp, + color: Color(0xFF4C4C4C), + ), + ) + ], + ), + ], + ), + ), + ), + ], + ), + ); + } + + Widget discountItem(Color color, textName, condition, amount) { + return Container( + margin: EdgeInsets.only(top: 9.h, bottom: 9.h), + child: Row( + children: [ + Container( + padding: EdgeInsets.fromLTRB(4.w, 2.h, 4.w, 2.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(2)), + border: Border.all( + width: 1, + color: color, + style: BorderStyle.solid, + ), + ), + child: Text( + textName, + style: TextStyle( + fontSize: 10.sp, + color: color, + ), + ), + ), + SizedBox( + width: 27.w, + ), + Expanded( + child: Text( + condition ?? "", + style: TextStyle( + fontSize: 10.sp, + color: Color(0xFFA29E9E), + ), + ), + flex: 1, + ), + Text( + S.of(context).yuan_("$amount"), + style: TextStyle( + fontSize: 12.sp, + color: color, + ), + ), + ], + ), + ); + } + + Widget buildQrCode() { + return Container( + margin: EdgeInsets.only(right: 16.w), + child: Stack( + children: [ + Container( + width: 94.w, + height: 33.h, + margin: EdgeInsets.only(left: 12.w), + padding: EdgeInsets.only(left: 16.w), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(25), + offset: Offset(0, 1), + blurRadius: 12, + spreadRadius: 0, + ) + ], + borderRadius: BorderRadius.only( + topLeft: Radius.circular(2), + bottomLeft: Radius.circular(2), + ), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + S.of(context).qujianma, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 12.sp, + color: Colors.black, + ), + ), + Icon( + Icons.keyboard_arrow_right, + color: Colors.black, + size: 16, + ) + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 6.h, bottom: 6.h), + // padding: EdgeInsets.all(2), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(25), + offset: Offset(0, 1), + blurRadius: 12, + spreadRadius: 0, + ) + ], + borderRadius: BorderRadius.circular(2), + ), + child: Icon( + Icons.qr_code, + size: 20, + color: Color(0xFF32A060), + ), + ), + ], + ), + ); + } + + Widget buildTotalPrice() { + return Container( + margin: EdgeInsets.only(top: 7.h, bottom: 11.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + children: [ + Expanded( + child: Text( + S.of(context).gongjijianshangpin( + (widget.orderInfo != null && widget.orderInfo.productList != null) + ? widget.orderInfo.productList.length + : "0"), + style: TextStyle( + fontSize: 10.sp, + color: Color(0xFFA29E9E), + ), + ), + flex: 1, + ), + Container( + child: Text( + S.of(context).jiesuanjine, + style: TextStyle( + fontSize: 10.sp, + color: Color(0xFF353535), + ), + ), + ), + SizedBox( + width: 5.w, + ), + Text( + totalPrice(), + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 30.sp, + color: Color(0xFF32A060), + ), + ) + ], + ), + ); + } + + String totalPrice() { + if (widget.orderInfo == null) return ""; + double totalPrice = (double.tryParse(widget.orderInfo.orderSum) + + double.tryParse(widget.orderInfo.postFee)); + if (widget.orderInfo.orderDetail != null && + widget.orderInfo.orderDetail.couponDTO != null) { + totalPrice -= double.tryParse(widget.orderInfo.orderDetail.couponDTO.money); + } + return "$totalPrice"; + } + +} \ No newline at end of file diff --git a/lib/order/order_view/order_info.dart b/lib/order/order_view/order_info.dart new file mode 100644 index 00000000..63bc5ba8 --- /dev/null +++ b/lib/order/order_view/order_info.dart @@ -0,0 +1,119 @@ + + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/order_info.dart'; + +class OrderInfoView extends StatefulWidget { + + final OrderInfo orderInfo; + + OrderInfoView(this.orderInfo); + + @override + State createState() { + return _OrderInfoView(); + } + +} + +class _OrderInfoView extends State { + + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 8.h), + padding: + EdgeInsets.only(left: 20.w, right: 20.w, top: 12.h, bottom: 12.h), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 1), + blurRadius: 12, + spreadRadius: 0, + ) + ], + borderRadius: BorderRadius.circular(8), + ), + child: Column( + children: [ + orderInfoItem( + S.of(context).dingdanhao, widget.orderInfo != null ? widget.orderInfo.id : ""), + orderInfoItem(S.of(context).xiadanshijian, + widget.orderInfo != null ? widget.orderInfo.createTime : ""), + // orderInfoItem(S.of(context).peisongfangshi, orderInfo != null ? orderInfo.createTime : ""), + orderInfoItem( + S.of(context).beizhu, + widget.orderInfo != null + ? widget.orderInfo.notes ?? S.of(context).qingshurubeizhuyaoqiu + : S.of(context).qingshurubeizhuyaoqiu), + orderInfoItem(S.of(context).zhifufangshi, + widget.orderInfo != null ? payChannel() : S.of(context).yue), + ], + ), + ); + } + + + String payChannel() { + switch (widget.orderInfo.payChannel) { + case 0: + return "现金支付"; + case 1: + return "微信支付"; + case 2: + return "支付宝支付"; + case 3: + return "商户会员余额支付"; + case 4: + return "平台会员余额支付"; + case 5: + return "美团买单"; + case 6: + return "饿了么支付"; + case 7: + return "扫呗支付"; + case 8: + return "微生活"; + case 9: + return "银联支付"; + } + return S.of(context).yue; + } + + Widget orderInfoItem(leftText, rightText) { + return Container( + margin: EdgeInsets.only(top: 8.h, bottom: 8.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + leftText, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 12.sp, + color: Color(0xFF727272), + ), + ), + Expanded( + child: Text( + rightText, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFF353535), + ), + ), + flex: 1, + ), + ], + ), + ); + } + + +} \ No newline at end of file diff --git a/lib/order/order_view/order_status.dart b/lib/order/order_view/order_status.dart new file mode 100644 index 00000000..5a06d926 --- /dev/null +++ b/lib/order/order_view/order_status.dart @@ -0,0 +1,198 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/order_info.dart'; +import 'package:huixiang/utils/flutter_utils.dart'; +import 'package:huixiang/view_widget/border_text.dart'; +import 'package:huixiang/view_widget/icon_text.dart'; +import 'package:huixiang/view_widget/round_button.dart'; + +class OrderStatus extends StatefulWidget { + + final int orderStatus; + final int isTakeOut; + final int sendStatus; + final int payStatus; + final int refundStatus; + final String title; + final String center; + final OrderInfo orderInfo; + + OrderStatus(this.orderStatus, this.isTakeOut, this.sendStatus, this.payStatus, this.refundStatus, this.title, this.center, this.orderInfo); + + @override + State createState() { + return _OrderStatus(); + } + +} + +class _OrderStatus extends State { + + + @override + Widget build(BuildContext context) { + return Container( + height: widget.orderStatus >= 4 ? 118.h : 118.h, + padding: EdgeInsets.fromLTRB(16.w, 0, 16.w, 10.h), + child: Column( + children: [ + Visibility( + visible: widget.center != null && widget.center != "", + child: Container( + child: IconText( + (widget.center != null && widget.center != "") ? widget.center : "", + leftImage: "assets/image/icon_order_ok.png", + iconSize: 40.w, + textStyle: TextStyle( + fontSize: 24.sp, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + ), + ), + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + RoundButton( + text: widget.isTakeOut == 0 + ? S.of(context).ziqu + : widget.isTakeOut == 1 + ? S.of(context).waimai + : S.of(context).kuaidi, + width: 42.w * AppUtils.textScale(context), + height: 20.h * AppUtils.textScale(context), + textColor: Colors.white, + fontSize: 12.sp, + padding: + EdgeInsets.fromLTRB(8.w, 1.h, 8.w, 1.h), + backgroup: Color(0xFF32A060), + radius: 15.w, + ), + Text( + widget.title, + style: TextStyle( + color: Colors.white, + fontSize: 12.sp, + ), + ), + ], + ), + flex: 1, + ), + Visibility( + child: Container( + height: 33.h, + child: Row( + mainAxisSize: MainAxisSize.min, + children: timeWidget(), + ), + ), + visible: (widget.orderStatus >= 4 || widget.isTakeOut == 2) + ? false + : (widget.isTakeOut == 0) + ? !(widget.payStatus == 1) + : (widget.isTakeOut == 1) + ? !(widget.payStatus == 1 && + (widget.sendStatus != 2 && + widget.sendStatus != 3)) + : !(widget.payStatus == 1 && + (widget.sendStatus != 1)), + ), + ], + ), + flex: 1, + ), + ], + ), + ); + } + + + List timeWidget() { + if (widget.orderInfo == null) return []; + String hour = ""; + String minute = ""; + if (widget.payStatus == 0) { + String hourMinute = AppUtils.getHourMinuteAfter30mByString( + (widget.orderInfo != null) ? widget.orderInfo.createTime : ""); + var hourMinutes = hourMinute.split(":"); + hour = hourMinutes[0]; + minute = hourMinutes[1]; + } else { + if (widget.isTakeOut == 0) { + } else if (widget.isTakeOut == 1) { + if (widget.sendStatus == 2 || widget.sendStatus == 3) { + String hourMinute = AppUtils.getHourMinuteByString( + (widget.orderInfo != null && widget.orderInfo.orderDetail != null) + ? widget.orderInfo.orderDetail.predictTime + : ""); + var hourMinutes = hourMinute.split(":"); + hour = hourMinutes[0]; + minute = hourMinutes[1]; + } + } else if (widget.isTakeOut == 2) { + // if (sendStatus == 1) { + // String hourMinute = AppUtils.getHourMinuteByString( + // (orderInfo != null && orderInfo.orderDetail != null) + // ? orderInfo.orderDetail.predictTime + // : ""); + // var hourMinutes = hourMinute.split(":"); + // hour = hourMinutes[0]; + // minute = hourMinutes[1]; + // } + } + } + return [ + AspectRatio( + aspectRatio: 1, + child: BorderText( + text: hour, + textColor: Colors.white, + fontSize: 21.sp, + fontWeight: FontWeight.bold, + borderColor: Colors.white, + borderWidth: 1, + padding: EdgeInsets.all(2), + ), + ), + SizedBox( + width: 8.w, + ), + Text( + ":", + style: TextStyle( + color: Colors.white, + fontSize: 21.sp, + ), + ), + SizedBox( + width: 8.w, + ), + AspectRatio( + aspectRatio: 1, + child: BorderText( + text: minute, + textColor: Colors.white, + fontSize: 21.sp, + fontWeight: FontWeight.bold, + borderColor: Colors.white, + borderWidth: 1, + padding: EdgeInsets.all(2), + ), + ), + ]; + } + + + +} \ No newline at end of file diff --git a/lib/union/union_details_page.dart b/lib/union/union_details_page.dart index 9846ed31..d5d025d3 100644 --- a/lib/union/union_details_page.dart +++ b/lib/union/union_details_page.dart @@ -44,6 +44,8 @@ class _UnionDetailsPage extends State { @override void dispose() { + SmartDialog.dismiss(); + EasyLoading.dismiss(); super.dispose(); refreshController.dispose(); } diff --git a/lib/view_widget/receive_success.dart b/lib/view_widget/receive_success.dart index 1ab8cf91..73cf98aa 100644 --- a/lib/view_widget/receive_success.dart +++ b/lib/view_widget/receive_success.dart @@ -53,7 +53,7 @@ class ReceiveSuccess extends StatelessWidget { child: Text( S.of(context).kaquan, style: TextStyle( - color: Color(0xffFF7A1A), + color: Color(0xFFFF7A1A), fontSize: 14.sp, fontWeight: FontWeight.bold, ),