/* * ==================================================== * package : * author : Created by nansi. * time : 2019-07-12 13:39 * remark : * ==================================================== */ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:power_logger/power_logger.dart'; import 'package:recook/base/base_store_state.dart'; import 'package:recook/constants/header.dart'; import 'package:recook/manager/user_manager.dart'; import 'package:recook/models/address_list_model.dart'; import 'package:recook/models/base_model.dart'; import 'package:recook/models/order_list_model.dart'; import 'package:recook/models/order_prepay_model.dart'; import 'package:recook/models/order_preview_model.dart'; import 'package:recook/models/self_pickup_store_list_model.dart'; import 'package:recook/pages/home/classify/mvp/order_mvp/order_presenter_impl.dart'; import 'package:recook/pages/home/classify/order_prepay_page.dart'; import 'package:recook/pages/home/items/goods_item_order.dart'; import 'package:recook/pages/home/items/oversea_accept_license_page.dart'; import 'package:recook/pages/home/items/consumer_notification_page.dart'; import 'package:recook/pages/user/address/receiving_address_page.dart'; import 'package:recook/pages/user/user_verify.dart'; import 'package:recook/pages/user/widget/recook_check_box.dart'; import 'package:recook/utils/custom_route.dart'; import 'package:recook/widgets/bottom_sheet/bottom_list.dart'; import 'package:recook/widgets/custom_app_bar.dart'; import 'package:recook/widgets/custom_image_button.dart'; import 'package:recook/widgets/input_view.dart'; import 'package:recook/widgets/progress/re_toast.dart'; import 'package:recook/widgets/toast.dart'; import 'package:velocity_x/velocity_x.dart'; class GoodsOrderPage extends StatefulWidget { final Map arguments; const GoodsOrderPage({Key key, this.arguments}) : super(key: key); static setArguments(OrderPreviewModel model) { return {"order": model}; } @override State createState() { return _GoodsOrderPageState(); } } class _GoodsOrderPageState extends BaseStoreState { OrderPreviewModel _orderModel; OrderPresenterImpl _presenterImpl; ScrollController _controller; TextEditingController _editController; FocusNode _focusNode = FocusNode(); List _storeList; String _selectedStoreName; bool _accept = false; ///瑞币抵扣按钮是否可以点击 bool get switchEnabled { if (_checkSwitchEnabled) { return false; } return _orderModel.data?.coinStatus?.isEnable ?? true; } //瑞币按钮状态 bool get isUseCoin => _orderModel.data?.coinStatus?.isUseCoin ?? false; @override void initState() { super.initState(); _orderModel = widget.arguments["order"]; _presenterImpl = OrderPresenterImpl(); _controller = ScrollController(); _controller.addListener(() {}); _editController = TextEditingController(text: _orderModel.data?.buyerMessage ?? ''); _focusNode.addListener(() { if (!_focusNode.hasFocus) { String text = _editController.text; if (text == _orderModel.data.buyerMessage) { return; } _changeBuyerMessage(text); } }); Future.delayed(Duration(milliseconds: 300), () { if (mounted) _changeOrderCoinOnOff().then((_) { if (_orderModel.data.addr.isDeliveryArea == 0) { _canNotDeliver(); } }); }); } @override void dispose() { _controller?.dispose(); _editController?.dispose(); _focusNode?.dispose(); super.dispose(); } @override Widget buildContext(BuildContext context, {store}) { // int totalNum = 0; // _orderModel.data.brands.forEach((brand) { // brand.goods.forEach((goods) { // totalNum += goods.quantity; // }); // }); return Scaffold( backgroundColor: AppColor.tableViewGrayColor, appBar: CustomAppBar( elevation: 0, title: "确认订单", themeData: AppThemes.themeDataGrey.appBarTheme, ), body: _buildBody(context), ); } Widget _buildBody(BuildContext context) { return Stack( children: [ Column(children: [ Expanded( child: GestureDetector( onVerticalDragDown: (detail) { if (globalContext != null) { FocusScope.of(globalContext).requestFocus(FocusNode()); } }, child: CustomScrollView( controller: _controller, physics: AlwaysScrollableScrollPhysics(), slivers: [ SliverToBoxAdapter( child: _orderModel.data.hasAuth ? UserManager.instance.user.info.realInfoStatus ? SizedBox() : CustomImageButton( onPressed: () { AppRouter.push( context, RouteName.USER_VERIFY, arguments: {}, ).then((value) { setState(() {}); }); }, child: Container( decoration: BoxDecoration( color: Color.fromRGBO(255, 243, 203, 1), borderRadius: BorderRadius.horizontal( right: Radius.circular(100), ), ), margin: EdgeInsets.fromLTRB( 0, rSize(10), rSize(13), 0), padding: EdgeInsets.symmetric( horizontal: 8, vertical: 10), child: Row( children: [ Image.asset( R.ASSETS_ORDER_ALERT_PNG, width: rSize(20), height: rSize(20), ), rWBox(10), Expanded( child: Text( '海关提醒:境订单订购人和支付人信息不一致,可能会影响订单通关,请务必认证!', style: TextStyle( color: Color.fromRGBO(210, 137, 64, 1), fontSize: rSP(13), ), ), ), rWBox(10), Text( '去认证 >', style: TextStyle( fontSize: rSP(13), color: Color.fromRGBO(210, 137, 64, 1), ), ), ], ), ), ) : SizedBox(), ), SliverToBoxAdapter( child: _orderModel.data.shippingMethod == 1 ? Container( height: 10, ) : _buildAddress(context), // child: _buildAddress(context), ), SliverToBoxAdapter( child: _otherTiles(), ), SliverList( delegate: SliverChildBuilderDelegate((context, index) { return GoodsOrderItem( brand: _orderModel.data.brands[index], shippingMethod: _orderModel.data.shippingMethod, ); }, childCount: _orderModel.data.brands.length)), // SliverToBoxAdapter( // child: _allAmountTitle(), // ), SliverToBoxAdapter( child: _coinTile(), ), SliverToBoxAdapter( child: _bottomInfoTitle(), ), SliverToBoxAdapter( child: _buildOverseaTitle(), ), SliverToBoxAdapter( child: SizedBox( height: 80 + MediaQuery.of(context).viewPadding.bottom, ), ), ], ), ), ), ]), Align( alignment: Alignment.bottomCenter, child: _bottomBar(context, _orderModel.data.totalGoodsCount), ), ], ); } _buildAddress(BuildContext context) { return CustomImageButton( padding: EdgeInsets.zero, onPressed: () { AppRouter.push(context, RouteName.RECEIVING_ADDRESS_PAGE, arguments: ReceivingAddressPage.setArguments( canBack: true, addr: _orderModel.data.addr)) .then((address) { DPrint.printf(address.runtimeType); if (address != null && address is Address) { // if (_orderModel.data.addr != null && address.id == _orderModel.data.addr.addressId) return; _changeAddress(address).then((value) { if (_orderModel.data.addr.isDeliveryArea == 0) { _canNotDeliver(); } }); } }); }, child: Container( margin: EdgeInsets.all(rSize(13)), padding: EdgeInsets.symmetric(horizontal: 8, vertical: 10), constraints: BoxConstraints(minHeight: 70), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(10))), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( margin: EdgeInsets.only(left: 5, right: 10), child: Image.asset( AppImageName.address_icon, width: 40, height: 40, ), // child: Icon(AppIcons.icon_address) ), Expanded(child: _addressView()), Icon( AppIcons.icon_next, size: rSize(16), color: Colors.grey, ) ], ), ), ); } _addressView() { return _orderModel.data.addr == null ? Text( "请先选择地址", style: AppTextStyle.generate(15), ) : Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ RichText( text: TextSpan( text: _orderModel.data.addr.receiverName, style: AppTextStyle.generate(15 * 2.sp), children: [ TextSpan( text: " ${_orderModel.data.addr.mobile}", style: AppTextStyle.generate(14 * 2.sp, color: Colors.grey)) ])), Container( margin: EdgeInsets.only(top: 8 * 2.sp), child: Text( TextUtils.isEmpty(_orderModel.data.addr.address) ? "空地址" : _orderModel.data.addr.province + _orderModel.data.addr.city + _orderModel.data.addr.district + _orderModel.data.addr.address, maxLines: 2, overflow: TextOverflow.ellipsis, style: AppTextStyle.generate(14 * 2.sp, fontWeight: FontWeight.w300), ), ), // Offstage( // offstage: !(_orderModel.data.addr.isDeliveryArea == 0), // child: Container( // margin: EdgeInsets.only(top: rSize(6)), // child: Text( // "当前地址不支持快递发货", // style: AppTextStyle.generate(12*2.sp, // color: Colors.red, fontWeight: FontWeight.w300), // ), // ), // ), ], ); } _canNotDeliver() { return showDialog( context: context, builder: (context) { return Dialog( backgroundColor: Colors.white, child: Padding( padding: EdgeInsets.fromLTRB(rSize(32), rSize(32), rSize(32), rSize(16)), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Center( child: Text( '提示', style: TextStyle( color: AppColor.blackColor, fontSize: rSP(16), fontWeight: FontWeight.bold, ), ), ), SizedBox(height: rSize(16)), Text( '不支持配送到该地区', style: TextStyle( color: AppColor.blackColor, fontSize: rSP(12), ), ), SizedBox(height: rSize(16)), FlatButton( onPressed: () => Navigator.pop(context), child: Text('我知道了'), color: Color.fromRGBO(244, 3, 5, 1), ), ], ), ), ); }, ); } _otherTiles() { String shippingMethod = "门店自提"; if (_orderModel.data.shippingMethod == 0) { shippingMethod = "快递配送"; } return Container( margin: EdgeInsets.only(left: rSize(13), right: rSize(13), bottom: rSize(10)), padding: EdgeInsets.symmetric(horizontal: rSize(8), vertical: rSize(6)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white), child: Column( children: [ // _couponTile(), _expressTile("配送方式", shippingMethod, needArrow: false, listener: () { // ActionSheet.show(globalContext, items: ["快递配送", "门店自提"], listener: (int index) { // Navigator.pop(globalContext); // print("------- $index"); // if (index == _orderModel.data.shippingMethod) { // return; // } // if (index == 0) { // _changeShippingMethod(0, 0, ""); // } else { // _selectedSelfPickupStore(); // } // }); }), Offstage( offstage: _orderModel.data.shippingMethod == 0, child: _expressTile( "附近门店", TextUtils.isEmpty(_selectedStoreName) ? "请选择自提门店" : _selectedStoreName, listener: () { _selectedSelfPickupStore(); }), ), _tileInput("买家留言", "选填"), ], ), ); } _couponTile() { return Container( margin: EdgeInsets.symmetric(vertical: rSize(8)), child: Row( children: [ Image.asset( AppImageName.coupon_common, width: ScreenAdapterUtils.setWidth(rSize(60)), ), Expanded( child: Container( margin: EdgeInsets.symmetric(horizontal: rSize(8)), child: Text( _orderModel.data.coupon == null ? "暂无优惠券" : _orderModel.data.coupon.couponName, style: AppTextStyle.generate(13 * 2.sp, color: Color(0xff373737)), // style: AppTextStyle.generate(13*2.sp, // fontWeight: FontWeight.w300, color: Colors.grey[700]), textAlign: TextAlign.end, ))), // Icon( // AppIcons.icon_next, // size: rSize(14), // color: Colors.grey, // ) ], ), ); } _expressTile(String title, String value, {Widget customTitle, VoidCallback listener, bool needArrow = true}) { return GestureDetector( onTap: listener, behavior: HitTestBehavior.translucent, child: Container( margin: EdgeInsets.symmetric(vertical: rSize(8)), child: Row( children: [ customTitle ?? Container( width: rSize(80), child: Text( title, style: AppTextStyle.generate( ScreenAdapterUtils.setSp(13.5), fontWeight: FontWeight.w400), )), Expanded( child: Text( value, maxLines: 1, style: AppTextStyle.generate(ScreenAdapterUtils.setSp(13.5), color: Colors.grey[600], fontWeight: FontWeight.w300), ), ), Offstage( offstage: !needArrow, child: Icon( AppIcons.icon_next, size: rSize(14), color: Colors.grey, )) ], ), ), ); } _tileInput(String title, String hint) { return Container( margin: EdgeInsets.symmetric(vertical: rSize(8)), child: Row( children: [ Container( width: rSize(80), child: Text( title, style: AppTextStyle.generate(ScreenAdapterUtils.setSp(13.5), fontWeight: FontWeight.w400), )), Expanded( child: InputView( showClear: false, padding: EdgeInsets.zero, textStyle: AppTextStyle.generate(ScreenAdapterUtils.setSp(13.5), color: Colors.grey[600], fontWeight: FontWeight.w300), hintStyle: AppTextStyle.generate(ScreenAdapterUtils.setSp(13.5), color: Colors.grey[600], fontWeight: FontWeight.w300), controller: _editController, focusNode: _focusNode, maxLength: 50, maxLines: 1, hint: hint, onValueChanged: (text) { // if (text == _orderModel.data.buyerMessage) { // return; // } // _changeBuyerMessage(text); }, onInputComplete: (String text) { // if (text == _orderModel.data.buyerMessage) { // return; // } // _changeBuyerMessage(text); }, ), ), ], ), ); } ///下单页面 包税仓类型2,3 不能使用瑞币抵扣 /// ///找到包含 2,3类型的仓库返回true bool get _checkSwitchEnabled { bool reslut = false; _orderModel.data.brands.forEach((element) { element.goods.forEach((v) { if (v.storehouse == 2 || v.storehouse == 3) { reslut = true; } }); }); return reslut; } _coinTile() { String text = _orderModel.data.coinStatus.coin > 0 ? "可用:¥${_orderModel.data.coinStatus.coin.toStringAsFixed(2)}" : "可用:¥0.0"; // _orderModel.data.coupon = null; return Container( margin: EdgeInsets.only(left: rSize(13), right: rSize(13), bottom: rSize(10)), padding: EdgeInsets.symmetric(horizontal: rSize(8), vertical: rSize(6)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white), child: Column( children: [ _titleRow("优惠券", "已选择最大优惠", "-¥${(_orderModel.data.brandCouponTotalAmount + _orderModel.data.universeCouponTotalAmount).toStringAsFixed(2)}"), Container( height: 5, ), Builder( builder: (context) { double coin = _orderModel.data.goodsTotalAmount > _orderModel.data.coinStatus.coin.toDouble() ? _orderModel.data.coinStatus.coin.toDouble() : _orderModel.data.goodsTotalAmount; return _titleRow( "瑞币", text, "本单抵扣: ¥${isUseCoin ? coin.toStringAsFixed(2) : '0.00'}", rightTitleColor: Colors.black, switchValue: isUseCoin, //后台回显 TODO: switchEnable: switchEnabled, switchChange: (change) { // 切换瑞币抵扣状态 _changeOrderCoinOnOff(); }, ); }, ), Container( height: 10, ), ], ), ); } _bottomInfoTitle() { return Container( margin: EdgeInsets.only(left: rSize(13), right: rSize(13), bottom: rSize(10)), padding: EdgeInsets.symmetric(horizontal: rSize(8), vertical: rSize(6)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white), child: Column( children: [ _titleRow("商品金额", "", "¥${_orderModel.data.goodsTotalAmount.toStringAsFixed(2)}", rightTitleColor: Colors.black), _titleRow("合计运费", "", "+¥${_orderModel.data.expressTotalFee.toStringAsFixed(2)}", rightTitleColor: Colors.black), Builder( builder: (context) { bool isOversea = false; for (var item in _orderModel.data.brands) { for (var childItem in item.goods) { if (childItem.storehouse == 2 || childItem.storehouse == 3) isOversea = true; } } return isOversea ? _titleRow("进口税", "", "+¥${(0).toStringAsFixed(2)}", rightTitleColor: Colors.black) : SizedBox(); }, ), _titleRow( "优惠券", "", "-¥${(_orderModel.data.universeCouponTotalAmount + _orderModel.data.brandCouponTotalAmount).toStringAsFixed(2)}", ), if (!_checkSwitchEnabled) _titleRow("瑞币抵扣", "", "-¥${_orderModel.data.coinTotalAmount.toStringAsFixed(2)}"), Container( height: 10, ), ], ), ); } _buildOverseaTitle() { bool isOversea = false; for (var item in _orderModel.data.brands) { for (var childItem in item.goods) { if (childItem.isImport == 1) isOversea = true; } } return isOversea ? Container( margin: EdgeInsets.only(top: rSize(16), bottom: rSize(42)), child: GestureDetector( onTap: () { _accept = !_accept; setState(() {}); }, child: Row( children: [ rWBox(15), RecookCheckBox(state: _accept), rWBox(10), Text( '同意并接受', style: TextStyle( color: AppColor.blackColor, fontSize: rSP(13), ), ), InkWell( onTap: () => Get.to( OverseaAcceptLicensePage(), ), child: Text( '《跨境商品用户购买须知》', style: TextStyle( color: Color(0xFF007AFF), fontSize: rSP(13), ), ), ), InkWell( //1.8版本新增 《消费者告知书》 onTap: () => Get.to( ConsumerNotificationPage(), ), child: Text( '《消费者告知书》', style: TextStyle( color: Color(0xFF007AFF), fontSize: rSP(13), ), ), ), ], ), ), ) : SizedBox(); } _titleRow(title, subTitle, rightTitle, {titleColor, subTitleColor, rightTitleColor, Function(bool) switchChange, bool switchValue = false, bool switchEnable = false}) { return Container( margin: EdgeInsets.only(top: 10), // height: 55, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( margin: EdgeInsets.only( right: 10, ), child: Text( title, style: titleColor != null ? AppTextStyle.generate(27.sp, color: titleColor, fontWeight: FontWeight.w400) : AppTextStyle.generate(27.sp, fontWeight: FontWeight.w400), )), Expanded( child: Text( subTitle, maxLines: 2, overflow: TextOverflow.ellipsis, style: subTitleColor != null ? AppTextStyle.generate(12 * 2.sp, color: subTitleColor, fontWeight: FontWeight.w300) : AppTextStyle.generate(12 * 2.sp, color: Color.fromARGB(255, 249, 62, 13), fontWeight: FontWeight.w300), ), ), Container( child: Text( rightTitle, style: rightTitleColor != null ? TextStyle( fontSize: 27.sp, fontWeight: FontWeight.w400, color: rightTitleColor) : TextStyle( fontSize: 27.sp, fontWeight: FontWeight.w400, color: Color.fromARGB(255, 249, 62, 13)), )), switchChange == null ? Container() : Container( margin: EdgeInsets.only(left: 5), child: CupertinoSwitch( activeColor: AppColor.priceColor, value: switchValue, onChanged: !switchEnable ? (change) { // ReToast.err(text: '订单含保税仓或海外仓商品,无法使用瑞币抵扣'); switchChange(change); } : (change) => switchChange(change)), ), Container( width: 5, ), ], ), ); } bool get _overseaNeedIdentifier { bool reslut = false; _orderModel.data.brands.forEach((element) { element.goods.forEach((v) { if (v.storehouse == 2 || v.storehouse == 3) { reslut = true; } }); }); return reslut; } bool get identicalName => UserManager.instance.user.info.realName.removeAllWhitespace == _orderModel.data.addr.receiverName.removeAllWhitespace; _allAmountTitle() { return Container( height: 55, margin: EdgeInsets.only(left: rSize(13), right: rSize(13), bottom: rSize(10)), padding: EdgeInsets.symmetric(horizontal: rSize(8), vertical: rSize(6)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white), child: Row( children: [ Container( child: Text( "小计 ", style: AppTextStyle.generate(27.sp, fontWeight: FontWeight.w400), )), Expanded( child: Text( "(共${_orderModel.data.totalGoodsCount}件)", maxLines: 1, style: AppTextStyle.generate(27.sp, color: Colors.grey[600], fontWeight: FontWeight.w300), ), ), Container( child: Text( "¥${_orderModel.data.goodsTotalAmount.toStringAsFixed(2)}", style: AppTextStyle.generate(27.sp, fontWeight: FontWeight.w400, color: Color.fromARGB(255, 249, 62, 13)), )), Container( width: 5, ), ], ), ); } Container _bottomBar(BuildContext context, int totalNum) { bool isOversea = false; for (var item in _orderModel.data.brands) { for (var childItem in item.goods) { if (childItem.isImport == 1) isOversea = true; } } // bool canDeliver = _orderModel.data.addr?.isDeliveryArea == 1 || // (_orderModel.data.addr?.isDeliveryArea == 0 && _orderModel.data.shippingMethod == 1); bool canDeliver = _orderModel.data.addr?.isDeliveryArea == 1 || (_orderModel.data.shippingMethod == 1); if (isOversea) { if (!_accept) canDeliver = false; } double ruiCoin = 0; _orderModel.data.brands.forEach((brand) { brand.goods.forEach((good) { ruiCoin += good.totalCommission; }); }); Container bottomWidget = Container( color: Colors.transparent, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ AppConfig.commissionByRoleLevel ? Container( alignment: Alignment.center, padding: EdgeInsets.symmetric( horizontal: 10, vertical: 5, ), color: Color(0xFFf3b5b8).withOpacity(0.95), child: Text( '共赚 ${ruiCoin.toStringAsFixed(2)} 瑞币', style: AppTextStyle.generate( 13 * 2.sp, color: Color.fromARGB(255, 249, 62, 13), ), ), ) : SizedBox(), Container( color: Colors.white, padding: EdgeInsets.all(10), child: SafeArea( bottom: true, child: Row( // mainAxisAlignment: MainAxisAlignment.end, children: [ RichText( text: TextSpan( // text: "共$totalNum件,", style: AppTextStyle.generate(14 * 2.sp, color: Colors.grey[600]), children: [ TextSpan( text: "应付金额: ", style: AppTextStyle.generate( 15 * 2.sp, )), TextSpan( text: "¥${_orderModel.data.actualTotalAmount.toStringAsFixed(2)}", style: AppTextStyle.generate( 16 * 2.sp, color: Color.fromARGB(255, 249, 62, 13), )), ]), ), Spacer(), Container( margin: EdgeInsets.symmetric(horizontal: rSize(14)), decoration: new BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(40)), gradient: !canDeliver ? const LinearGradient(colors: [ AppColor.tableViewGrayColor, AppColor.tableViewGrayColor, ]) : const LinearGradient(colors: [ Color.fromARGB(255, 249, 117, 10), Color.fromARGB(255, 249, 67, 7), ])), child: CustomImageButton( padding: EdgeInsets.symmetric( vertical: rSize(4), horizontal: rSize(25)), title: "提交订单", color: Colors.white, disabledColor: Colors.grey[600], fontSize: 14 * 2.sp, onPressed: !canDeliver ? null : () { if (_overseaNeedIdentifier) { if (!UserManager .instance.user.info.realInfoStatus) { Get.to(() => VerifyPage()); } else if (!identicalName) { ReToast.err( text: '因订单含境商品,收货人联系方式需与当前账号实名认证姓名相同'); } else { _submit(context); } // AppRouter.push( // context, // RouteName.USER_VERIFY, // ); } else _submit(context); }, ), ) ], ), ), ), ], ), ); if (_orderModel != null && _orderModel.data.goodsTotalCommission > 0 && _orderModel.data.userRole > 0) { return Container( height: kToolbarHeight + 30 + ScreenUtil().bottomBarHeight, child: Column( children: [ Container( height: 30, alignment: Alignment.center, color: Color.fromARGB(255, 250, 231, 235), child: Text( "下单可返¥${_orderModel.data.goodsTotalCommission}", style: TextStyle(color: Colors.red, fontSize: 11 * 2.sp), ), ), bottomWidget, ], ), ); } else { return bottomWidget; } } _getStoreList(int method) async { HttpResultModel model = await _presenterImpl.getStoreList(); if (!model.result) { // GSDialog.of(context).showError(globalContext, model.msg); ReToast.err(text: model.msg); return; } _storeList = model.data.data; _selectedSelfPickupStore(); } _selectedSelfPickupStore() { if (_storeList == null) { _getStoreList(1); return; } DPrint.printf("${_storeList.length}"); BottomList.show(globalContext, title: "请选择自提门店", data: _storeList, itemBuilder: (int index, SelfPickupStoreModel model) { return Container( alignment: Alignment.centerLeft, margin: EdgeInsets.symmetric( horizontal: rSize(15), vertical: rSize(5), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( model.name, style: AppTextStyle.generate(13), ), Text( model.address, style: AppTextStyle.generate(11), ), ], ), ); }, clickListener: (int index, SelfPickupStoreModel model) { _changeShippingMethod(1, model.id, model.name); }); } Future _changeAddress(Address address) async { final cancel = ReToast.loading(); HttpResultModel model = await _presenterImpl.changeAddress( UserManager.instance.user.info.id, _orderModel.data.id, address.id, ); cancel(); if (!model.result) { ReToast.err(text: model.msg); return; } _orderModel = model.data; setState(() {}); } Future _changeOrderCoinOnOff() async { final cancel = ReToast.loading(); HttpResultModel model = await _presenterImpl.changeCoinOnOff( UserManager.instance.user.info.id, _orderModel.data.id, ); cancel(); if (!model.result) { ReToast.err(text: model.msg); return; } _orderModel = model.data; setState(() {}); } // _changeAddressWithShippingMethod(int id) async { // GSDialog.of(context).showLoadingDialog(context, ""); // HttpResultModel model = await _presenterImpl.changeAddress( // UserManager.instance.user.info.id, _orderModel.data.id, id); // GSDialog.of(context).dismiss(context); // if (!model.result) { // GSDialog.of(context).showError(globalContext, model.msg); // return; // } // _orderModel = model.data; // setState(() {}); // } _changeShippingMethod(int method, int storeId, String name) async { if (method == 1 && name == _selectedStoreName) { return; } // GSDialog.of(context).showLoadingDialog(context, ""); ReToast.loading(text: ''); HttpResultModel resultModel = await _presenterImpl.changeShippingMethod( UserManager.instance.user.info.id, _orderModel.data.id, method, storeId); // GSDialog.of(context).dismiss(context); if (!resultModel.result) { // GSDialog.of(context).showError(globalContext, resultModel.msg); ReToast.err(text: resultModel.msg); return; } _orderModel = resultModel.data; if (method == 1) { _selectedStoreName = name; } else { _selectedStoreName = ""; } setState(() {}); //同步更改收货地址 // _changeAddressWithShippingMethod(storeId); } _changeBuyerMessage(String msg) async { final cancel = ReToast.loading(); HttpResultModel resultModel = await _presenterImpl.changeBuyerMessage( UserManager.instance.user.info.id, _orderModel.data.id, msg); // GSDialog.of(context).dismiss(context); cancel(); if (!resultModel.result) { ReToast.err(text: resultModel.code); return; } _orderModel.data.buyerMessage = msg; } _submit(BuildContext context) async { final cancel = ReToast.loading(); HttpResultModel resultModel = await _presenterImpl .submitOrder(_orderModel.data.id, UserManager.instance.user.info.id); cancel(); if (!resultModel.result) { ReToast.err(text: resultModel.msg); return; } UserManager.instance.refreshShoppingCart.value = true; UserManager.instance.refreshShoppingCartNumber.value = true; AppRouter.pushAndReplaced(context, RouteName.ORDER_PREPAY_PAGE, arguments: OrderPrepayPage.setArguments( resultModel.data, goToOrder: true, canUseBalance: !_checkSwitchEnabled, )); } }