import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/coupon.dart'; import 'package:huixiang/retrofit/data/settleOrderInfo.dart'; import 'package:huixiang/retrofit/data/store_info.dart'; import 'package:huixiang/retrofit/min_api.dart'; import 'package:huixiang/store/store_view/settlement_order_commodity.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/rename_dialog.dart'; import 'package:huixiang/view_widget/rename_dialog_content.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:huixiang/view_widget/separator.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class Settlement extends StatefulWidget { final arguments; Settlement({this.arguments}); @override State createState() { return _Settlement(); } } class _Settlement extends State { MinApiService minService; int selectedBtn = 0; Coupon coupon; Function(int type) callback; GestureTapCallback callbackEx; int isSelected = 0; @override void initState() { super.initState(); storeInfo = widget.arguments["storeInfo"]; SharedPreferences.getInstance().then((value) { String minToken = value.getString("minToken"); String tenant = value.getString("tenant"); minService = MinApiService( Dio(), context: context, token: minToken, tenant: tenant, ); queryOrderInfo(); }); } StoreInfo storeInfo; SettleOrderInfo settleOrderInfo; ///订单结算信息 queryOrderInfo() async { BaseData baseData = await minService.getOrderInfo({ "addressId": null, "isTake": 0, "memberCouponId": null, "orderId": 0, "promotionId": null }); if (baseData != null && baseData.isSuccess) { settleOrderInfo = baseData.data; setState(() {}); } } @override Widget build(BuildContext context) { return Stack( children: [ Positioned( top: 0, left: 0, right: 0, child: Container( height: 175.h, color: Color(0xFF3A405A), width: MediaQuery.of(context).size.width, ), ), Positioned( child: Scaffold( backgroundColor: Colors.transparent, appBar: MyAppBar( background: Color(0xFF3A405A), leadingColor: Colors.white, title: S.of(context).dingdanjiesuan, titleColor: Colors.white, titleSize: 18.sp, ), body: Container( child: SingleChildScrollView( physics: BouncingScrollPhysics(), child: Container( child: Column( children: [ distributionMode(), SizedBox( height: 14, ), ///订单商品 SettlementOrderCommodity(settleOrderInfo, 0), // if (payStatus == 0) couponRemarks(), /*(payStatus == 0) ? paySelector() : */ ///优惠券/备注 activityRemarks(), ///支付方式 payMethod(), ], ), ), ), ), ), left: 0, right: 0, top: 0, bottom: 0, ), Positioned( bottom: 0, left: 0, right: 0, child: Container( height: 54.h, color: Colors.white, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Spacer(), Text( S.of(context).heji, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Colors.black, ), ), Text( "¥19.00", style: TextStyle( fontSize: 20.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xFF32A060), ), ), SizedBox( width: 28, ), GestureDetector( onTap: () {}, child: RoundButton( width: 103.w, height: 54.h, text: S.current.jiesuan, textColor: Colors.white, fontWeight: MyFontWeight.regular, backgroup: Color(0xFF32A060), fontSize: 16.sp, padding: EdgeInsets.symmetric(vertical: 5.h), ), ), ], ), ), ) ], ); } String title = ""; String center = ""; TextEditingController _vc = TextEditingController(); Widget distributionMode() { return Container( decoration: BoxDecoration( color: Color(0xFFFAFAFA), boxShadow: [ BoxShadow( color: Color(0x0D000000), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], borderRadius: BorderRadius.circular(8), ), height: 175.h, margin: EdgeInsets.only(left: 16, right: 16, top: 15), child: Stack( children: [ Column( children: [ Container( decoration: BoxDecoration( color: Color(0xFF9C9FAC), borderRadius: BorderRadius.only( topLeft: Radius.circular(8), topRight: Radius.circular(8), ), ), height: 50.h, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, child: Container( height: 50.h, decoration: BoxDecoration( image: selectedBtn == 0 ? DecorationImage( image: AssetImage("assets/image/order_btn1.png"), fit: BoxFit.fill, ) : null, borderRadius: BorderRadius.only( topLeft: Radius.circular(8), ), ), child: GestureDetector( onTap: () { setState(() { selectedBtn = 0; }); }, child: Stack( alignment: Alignment.center, children: [ Text( S.of(context).daodianziqu, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.semi_bold, color: Colors.black, ), ), ], ), ), ), ), Expanded( flex: 1, child: GestureDetector( onTap: () { setState(() { selectedBtn = 1; }); }, child: Stack( alignment: Alignment.center, children: [ if (selectedBtn == 1) Image.asset( "assets/image/order_btn2.png", height: 50.h, fit: BoxFit.fill, ), Text( S.of(context).waimaipeisong, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.regular, color: Colors.black, ), ), ], ), ), ), Expanded( flex: 1, child: Container( height: 50.h, decoration: BoxDecoration( image: selectedBtn == 2 ? DecorationImage( image: AssetImage("assets/image/order_btn3.png"), fit: BoxFit.fill, ) : null, borderRadius: BorderRadius.only( topRight: Radius.circular(8), ), ), child: GestureDetector( onTap: () { setState(() { // selectedBtn = 2; SmartDialog.showToast("该功能暂未开放!", alignment: Alignment.center); }); }, child: Stack( alignment: Alignment.center, children: [ Text( S.of(context).kuaidiwuliu, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.regular, color: Colors.black, ), ), ], ), ), ), ), ], ), ), selectedBtn == 0 ? Container( width: double.infinity, padding: EdgeInsets.only(left: 16, right: 16, top: 15), child: Column( children: [ Row( children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( storeInfo != null ? (storeInfo.storeName ?? "") : "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xFF4C4C4C), ), ), SizedBox( height: 4, ), Text( storeInfo != null ? storeInfo.address : "", overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Color(0xFF727272), ), ), SizedBox( height: 12, ), ], ), ), SizedBox( width: 18, ), Stack( alignment: Alignment.center, children: [ Column( children: [ Image.asset( "assets/image/map.png", height: 61.h, width: 61.w, ), ], ), Column( children: [ RoundButton( width: 41.w, height: 13, text: "距离您11m", textColor: Color(0xFF34A262), fontWeight: MyFontWeight.semi_bold, radius: 7.5, backgroup: Colors.white, fontSize: 7.sp, ), Image.asset( "assets/image/landmark.png", height: 24.h, width: 24.w, ), ], ), ], ) ], ), Row( children: [ Expanded( child: Text( S.of(context).yuliudianhua, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.regular, color: Color(0xFF4C4C4C), ), ), ), Text( storeInfo != null ? storeInfo.headMobile : "", style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.medium, color: Color(0xFF4C4C4C), ), ), GestureDetector( onTap: () { showAlertDialog(); }, child: Image.asset( "assets/image/pen.png", height: 14.h, width: 14.w, ), ), ], ) ], ), ) : Container( width: double.infinity, padding: EdgeInsets.only(left: 16, right: 16, top: 15), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Image.asset( "assets/image/icon_permission_location.png", height: 24.h, width: 24.w, ), Text( "张先生", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 15.sp, fontWeight: MyFontWeight.medium, color: Color(0xFF4C4C4C), ), ), SizedBox( width: 13, ), Expanded( child: Text( "12309090909", overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( fontSize: 15.sp, fontWeight: MyFontWeight.medium, color: Color(0xFF4C4C4C), ), ), ), Icon( Icons.keyboard_arrow_right, size: 24, ), ], ), Padding( padding: EdgeInsets.only(top: 4, left: 25), child: Text( "武昌区中国铁建凯德1818蓝调步行街中北路109附33门牌号05", overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Color(0xFF727272), ), ), ), ], ), ), ], ), ], ), ); } Widget activityRemarks() { return Container( decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Color(0x0D000000), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], borderRadius: BorderRadius.circular(8), ), height: 86.h, margin: EdgeInsets.only( left: 16, right: 16, top: 15, ), padding: EdgeInsets.only( left: 16, right: 16, top: 16, ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, child: Text( S.of(context).youhuiquan, style: TextStyle( fontWeight: MyFontWeight.regular, fontSize: 14.sp, color: Color(0xFF353535), ), ), ), Text( "满30减10", textAlign: TextAlign.end, style: TextStyle( fontSize: 14.sp, color: Color(0xFF32A060), fontWeight: MyFontWeight.semi_bold, ), ), InkWell( onTap: () { setState(() { couponCart(); }); }, child: Icon( Icons.keyboard_arrow_right, size: 16, ), ), ], ), SizedBox( height: 13, ), Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, child: Text( S.of(context).beizhu, style: TextStyle( fontWeight: MyFontWeight.regular, fontSize: 14.sp, color: Color(0xFF353535), ), ), ), Text( "口味、面包硬度等", textAlign: TextAlign.end, style: TextStyle( fontSize: 14.sp, color: Color(0xFF353535), fontWeight: MyFontWeight.semi_bold, ), ), Icon( Icons.keyboard_arrow_right, size: 16, ), ], ), ], ), ); } Widget payMethod() { return Container( width: double.infinity, margin: EdgeInsets.only( left: 16.w, right: 16.w, top: 12.h, bottom: 4.h, ), padding: EdgeInsets.only( left: 16.w, right: 16.w, top: 20.h, bottom: 20.h, ), decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Color(0x000000).withAlpha(25), offset: Offset(0, 1), blurRadius: 12.0, ), ], color: Colors.white, borderRadius: BorderRadius.circular(8), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(bottom: 16.h), child: Text( S.of(context).zhifufangshi, style: TextStyle( fontSize: 16.sp, color: Colors.black, fontWeight: MyFontWeight.regular, ), ), ), GestureDetector( onTap: () { setState(() { checkIndex = 1; }); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ checkView(1), Text( S.of(context).pingtaiyue, style: TextStyle( fontSize: 14.sp, color: Color(0xff353535), fontWeight: MyFontWeight.semi_bold), ), ], ), ), SizedBox( height: 10, ), GestureDetector( onTap: () { setState(() { checkIndex = 2; }); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ checkView(2), Text( S.of(context).dianpuyue, style: TextStyle( fontSize: 14.sp, color: Color(0xff353535), fontWeight: MyFontWeight.semi_bold, ), ), ], ), ), SizedBox( height: 10, ), GestureDetector( onTap: () { setState(() { checkIndex = 3; }); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ checkView(3), Spacer(), Image.asset("assets/image/icon_we_chat.png"), Padding( padding: EdgeInsets.only(left: 8.w), child: Text( S.of(context).weixinzhifu, style: TextStyle( fontSize: 14.sp, color: Color(0xff353535), fontWeight: MyFontWeight.semi_bold, ), ), ), ], ), ), ], ), ); } ///手机号编辑 showAlertDialog() { //显示对话框 showDialog( barrierDismissible: false, context: context, builder: (context) { return RenameDialog( contentWidget: RenameDialogContent( title: "请输入新的手机号码", okBtnTap: () { // print( // "输入框中的文字为:${_vc.text}", // ); }, vc: _vc, cancelBtnTap: () {}, ), ); }); } ///优惠券弹窗 couponCart() { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, builder: (context) { return StatefulBuilder(builder: (context1, state) { return Container( alignment: Alignment.topCenter, width: double.infinity, height: MediaQuery.of(context).size.height / 2, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(8), topRight: Radius.circular(8), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.only( top: 16, left: 16, right: 16, bottom: 8, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "可用优惠券", style: TextStyle( color: Color(0xFF000000), fontSize: 14.sp, fontWeight: MyFontWeight.medium, ), ), SizedBox( width: 4, ), Expanded( child: Text( "(1)", style: TextStyle( color: Color(0xFF000000), fontSize: 14.sp, fontWeight: MyFontWeight.medium, ), ), ), InkWell( onTap: () { Navigator.of(context).pop(); }, child: Image.asset( "assets/image/cancel.png", width: 24, height: 24, ), ), ], ), ), Expanded( child: Container( padding: EdgeInsets.only( top: 8, left: 16, right: 16, ), child: ListView.builder( itemCount: 5, physics: BouncingScrollPhysics(), itemBuilder: (context, position) { // return shoppGoodsItem(); return GestureDetector( onTap: () {}, child: couponItem(position), ); }, ), ), ), ], ), ); }); }, ); } ///优惠券列表 Widget couponItem(int index) { return StatefulBuilder(builder: (context1, state) { return Container( height: 170, width: double.infinity, margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ) ], ), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Container( margin: EdgeInsets.only(top: 14.h, bottom: 8.h), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, children: [ Text( "¥", style: TextStyle( fontSize: 22.sp, fontWeight: MyFontWeight.medium, color: Color(0xff32A060), ), ), SizedBox( height: 4.h, ), Text( "5", style: TextStyle( fontSize: 40.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xff32A060), ), ), ], ), ), Text( S.of(context).manyuankeyong(30), style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xff32A060), ), ), ], ), flex: 1, ), Expanded( flex: 2, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( padding: EdgeInsets.fromLTRB(4, 2, 4, 2), decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), border: Border.all( width: 1, color: Color(0xFFFF7A1A), style: BorderStyle.solid, ), ), child: Text( S.of(context).shangjiaquan, style: TextStyle( fontSize: 10.sp, fontWeight: MyFontWeight.medium, color: Color(0xFFFF7A1A), ), ), ), SizedBox( width: 8.w, ), Expanded( child: Text( "百年川椒火锅店", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 16.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xff353535), ), ), flex: 1, ) ], ), Text( "#新客户满减优惠#", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, color: Color(0xff727272), ), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( S.of(context).quanchangtongyong, style: TextStyle( color: Color(0xFF353535), fontSize: 12.sp, ), ), Container( margin: EdgeInsets.only(right: 23.w), child: GestureDetector( onTap: () { state(() { isSelected = index; }); }, child: Image.asset( isSelected != index ? "assets/image/icon_radio_unselected.png" : "assets/image/icon_radio_selected.png", width: 24, height: 24, ), ), ), ], ), ], ), ), ], ), ), flex: (coupon != null && coupon.isEx) ? 97 : 97, ), Container( padding: EdgeInsets.symmetric(horizontal: 23.w), child: MySeparator( width: 5.w, height: 1.h, color: Color(0xFF353535), ), ), Expanded( flex: (coupon != null && coupon.isEx) ? 56 : 42, child: Container( margin: EdgeInsets.symmetric(horizontal: 23.w, vertical: 8.h), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( S.of(context).xiangqing, style: TextStyle( color: Color(0xFF353535), fontSize: 10.sp, ), ), GestureDetector( child: Icon( (coupon != null && !coupon.isEx) ? Icons.keyboard_arrow_down : Icons.keyboard_arrow_up, color: Colors.black, size: 18, ), //点击按钮布局 onTap: callbackEx, ), ], ), if (coupon != null && coupon.isEx) Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( S.of(context).shiyongriqi, style: TextStyle( color: Color(0xFF353535), fontSize: 10.sp, ), ), Text( (coupon.useStartTime == null && coupon.useEndTime == null) ? S.of(context).quantian : "${coupon.useStartTime.replaceAll("-", ".").split(" ")[0]} - ${coupon.useEndTime.replaceAll("-", ".").split(" ")[0]}", style: TextStyle( color: Color(0xFF353535), fontSize: 10.sp, ), ), ], ), ], ), ), ), ], ), ); }); } var checkIndex = 1; Widget checkView(var index) { return Container( padding: EdgeInsets.only(right: 16.w), alignment: Alignment.center, child: Image.asset( checkIndex != index ? "assets/image/icon_radio_unselected.png" : "assets/image/icon_radio_selected.png", width: 15.w, height: 15.h, ), ); } }