import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:dio/dio.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/user_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class ExchangeOrderPage extends StatefulWidget { final Map arguments; ExchangeOrderPage({this.arguments}); @override State createState() { return _ExchangeOrderPage(); } } class _ExchangeOrderPage extends State { ApiService apiService; @override void initState() { super.initState(); SharedPreferences.getInstance().then((value) => { apiService = ApiService(Dio(), context: context, token: value.getString("token")), points = UserInfo.fromJson(jsonDecode(value.getString('user'))).points, }); } String points; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( S.of(context).dingdanqueren, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold, fontSize: 18, ), ), centerTitle: false, backgroundColor: Color(0xFFFAFAFA), elevation: 0, leading: GestureDetector( onTap: () { Navigator.of(context).pop(); }, child: Container( alignment: Alignment.centerRight, margin: EdgeInsets.only(left: 10), padding: EdgeInsets.all(6), child: Icon( Icons.arrow_back_ios, color: Colors.black, size: 24, ), ), ), titleSpacing: 2, leadingWidth: 56, ), body: Column( children: [ Expanded( child: Column( children: [ Container( margin: EdgeInsets.only(left: 16, right: 16, top: 26, bottom: 8), 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.all(Radius.circular(8)), ), child: Column( children: [ Row( children: [ Image.asset( "assets/image/icon_order_exchange_info.png", width: 24, height: 24, ), SizedBox(width: 4), Text( S.of(context).duihuanxinxi, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: Color(0xFF353535)), ), ], ), SizedBox( height: 18, ), Row( children: [ Text( S.of(context).lingqufangshi, style: TextStyle( fontSize: 14, color: Color(0xFF353535), ), ), SizedBox( width: 12, ), Text( widget.arguments["useTyped"] == 1 ? S.of(context).ziti : widget.arguments["useTyped"] == 2 ? S.of(context).peisong : S.of(context).xianshangfafang, style: TextStyle( fontSize: 14, color: Color(0xFF353535), ), ), ], ), Visibility( child: SizedBox( height: 13, ), visible: widget.arguments["useTyped"] != 3, ), Visibility( child: Row( children: [ Text( S.of(context).zitidizhi, style: TextStyle( fontSize: 14, color: Color(0xFF353535), ), ), SizedBox( width: 12, ), Expanded( child: GestureDetector( onTap: () { toAddressPicker(); }, child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, mainAxisSize: MainAxisSize.min, children: [ Expanded( child: Text( (address != null && address != "") ? address : widget.arguments["useTyped"] == 1 ? S.of(context).qingxuanzhemendian : widget.arguments["useTyped"] == 2 ? S .of(context) .qingxuanzeshouhuodizhi : S.of(context).xuni, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14, color: Color(0xFF32A060), ), ), flex: 1, ), Icon( Icons.keyboard_arrow_right, size: 16, color: Color(0xFF32A060), ), ], ), ), flex: 1, ), ], ), visible: widget.arguments["useTyped"] != 3, ), SizedBox( height: 12, ), Row( children: [ Visibility( visible: widget.arguments["useTyped"] != 3, child: Text( S.of(context).zitishijian, style: TextStyle( fontSize: 14, color: Color(0xFF353535)), ), ), Visibility( visible: widget.arguments["useTyped"] != 3, child: SizedBox( width: 12, ), ), Text( widget.arguments["useTyped"] == 1 ? S.of(context).duihuanhouwugegongzuori : widget.arguments["useTyped"] == 2 ? S.of(context).duihuanhoufahuo : S.of(context).feishiwushangpin, style: TextStyle( fontSize: 14, color: widget.arguments["useTyped"] == 3 ? Color(0xFF32A060) : Color(0xFF353535)), ), ], ), ], ), ), Container( margin: EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16), 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.all(Radius.circular(8)), ), child: Column( children: [ Row( children: [ Image.asset( "assets/image/icon_order_commodity_info.png", width: 24, height: 24, ), SizedBox(width: 4), Text( S.of(context).duihuanshangpinxiangqing, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: Color(0xFF353535), ), ), ], ), SizedBox( height: 18, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ Image.network( widget.arguments["image"], fit: BoxFit.cover, width: 80.w, height: 80.h, ), Expanded( child: Container( height: 80.h, margin: EdgeInsets.only(left: 16.w), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( widget.arguments["name"], style: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: Color(0xFF353535)), ), SizedBox( height: 4, ), Text( "x1", style: TextStyle( fontSize: 12, color: Color(0xFF727272)), ), ], ), ), flex: 1, ) ], ), SizedBox( height: 12, ), // Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Text( // "商品积分", // style: // TextStyle(fontSize: 14, color: Color(0xFF353535)), // ), // SizedBox( // width: 12, // ), // Text( // S.of(context).jifen_(widget.arguments["price"]), // style: TextStyle( // fontSize: 12, // color: Colors.black, // ), // ), // ], // ), // SizedBox( // height: 12, // ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( "实付积分", style: TextStyle(fontSize: 14, color: Color(0xFF353535)), ), SizedBox( width: 12, ), Text( S.of(context).jifen_(widget.arguments["price"]), style: TextStyle(fontSize: 12, color: Color(0xFF32A060)), ), ], ), ], ), ), ], )), GestureDetector( onTap: () { if (!storeIsSelected) return; creditOrder(); }, child: Container( padding: EdgeInsets.only(top: 16, bottom: 16), decoration: BoxDecoration( color: MaterialStateColor.resolveWith((states) => storeIsSelected ? Color(0xFF32A060) : Color(0xFFD8D8D8)), borderRadius: BorderRadius.only( topLeft: Radius.circular(4), topRight: Radius.circular(4))), alignment: Alignment.center, child: Text( S.of(context).querenduihuan, style: TextStyle( fontSize: 16, color: MaterialStateColor.resolveWith((states) => storeIsSelected ? Colors.white : Color(0xFFA0A0A0)), fontWeight: FontWeight.bold), ), ), ), ], ), ); } var storeIsSelected = true; String storeId; String address; String userAddressId; toAddressPicker() async { if (widget.arguments["useTyped"] == 1) { dynamic result = await Navigator.of(context).pushNamed('/router/store_selector_page'); if (result == null) return; storeId = result["id"]; address = result["address"]; } else if (widget.arguments["useTyped"] == 2) { dynamic result = await Navigator.of(context).pushNamed( '/router/manage_address_page', arguments: {"isSelector": true}); if (result == null) return; userAddressId = result["id"]; address = result["address"]; } setState(() {}); } creditOrder() async { if (widget.arguments["useTyped"] == 1 && (storeId == null || storeId == "")) { SmartDialog.showToast("请选择一个门店"); return; } if (widget.arguments["useTyped"] == 2 && (userAddressId == null || userAddressId == "")) { SmartDialog.showToast("请选择一个收货地址"); return; } BaseData baseDate = await apiService.creditOrder({ "goodsId": widget.arguments["goodsId"], "number": 1, "useTyped": widget.arguments["useTyped"], if (widget.arguments["useTyped"] == 1) "storeId": storeId, if (widget.arguments["useTyped"] == 2) "userAddressId": userAddressId, }); if (baseDate.isSuccess) { await Navigator.of(context).pushNamed( '/router/exchange_order_success_page', arguments: {"price": widget.arguments["price"], "points": points, "id": baseDate.data}); points = "${int.tryParse(points) - int.tryParse(widget.arguments["price"])}"; Navigator.of(context).pop(); } else { SmartDialog.showToast(baseDate.msg); } } }