You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

445 lines
17 KiB

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:huixiang/view_widget/my_appbar.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class ExchangeOrderPage extends StatefulWidget {
final Map<String, dynamic> arguments;
///兑换订单
ExchangeOrderPage({this.arguments});
@override
State<StatefulWidget> createState() {
return _ExchangeOrderPage();
}
}
class _ExchangeOrderPage extends State<ExchangeOrderPage> {
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: MyAppBar(
title: S.of(context).dingdanqueren,
titleColor: Colors.black,
titleSize: 18.sp,
background: Color(0xFFFAFAFA),
leadingColor: Colors.black,
),
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.h,
),
Row(
children: [
Text(
S.of(context).lingqufangshi,
style: TextStyle(
fontSize: 14.sp,
color: Color(0xFF353535),
),
),
SizedBox(
width: 12.w,
),
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.sp,
color: Color(0xFF353535),
),
),
],
),
Visibility(
child: SizedBox(
height: 13.h,
),
visible: widget.arguments["useTyped"] != 3,
),
Visibility(
child: Row(
children: [
Text(
S.of(context).zitidizhi,
style: TextStyle(
fontSize: 14.sp,
color: Color(0xFF353535),
),
),
SizedBox(
width: 12.w,
),
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.sp,
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.h,
),
Row(
children: [
Visibility(
visible: widget.arguments["useTyped"] != 3,
child: Text(
S.of(context).zitishijian,
style: TextStyle(
fontSize: 14.sp, color: Color(0xFF353535)),
),
),
Visibility(
visible: widget.arguments["useTyped"] != 3,
child: SizedBox(
width: 12.w,
),
),
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.sp,
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: [
if (widget.arguments["image"] != null)
Image.network(
widget.arguments["image"],
fit: BoxFit.cover,
width: 80,
height: 80,
)
else
Image.asset(
"assets/image/default_1.png",
fit: BoxFit.cover,
width: 80,
height: 80,
),
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.sp,
fontWeight: FontWeight.bold,
color: Color(0xFF353535)),
),
SizedBox(
height: 4.h,
),
Text(
"x1",
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF727272)),
),
],
),
),
flex: 1,
)
],
),
SizedBox(
height: 12.h,
),
// 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.sp, color: Color(0xFF353535)),
),
SizedBox(
width: 12.w,
),
Text(
S.of(context).jifen_(widget.arguments["price"]),
style: TextStyle(
fontSize: 12.sp, 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.sp,
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("请选择一个门店", alignment: Alignment.center);
return;
}
if (widget.arguments["useTyped"] == 2 &&
(userAddressId == null || userAddressId == "")) {
SmartDialog.showToast("请选择一个收货地址", alignment: Alignment.center);
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, alignment: Alignment.center);
}
}
}