修改二维码扫描接口及界面

master
zhangmeng 4 years ago
parent 3677f8b064
commit 8c20e341e0

@ -11,6 +11,7 @@ class ScanResultModel {
final num discount;
final num commission;
final String goodsImg;
final num inventory;
ScanResultModel(
this.skuID,
@ -22,6 +23,7 @@ class ScanResultModel {
this.discount,
this.commission,
this.goodsImg,
this.inventory,
);
Map<String, dynamic> toMap() {
@ -35,6 +37,7 @@ class ScanResultModel {
'discount': discount,
'commission': commission,
'goodsImg': goodsImg,
'inventory': inventory,
};
}
@ -49,6 +52,7 @@ class ScanResultModel {
map['discount'],
map['commission'],
map['goodsImg'],
map['inventory'],
);
}
@ -59,7 +63,7 @@ class ScanResultModel {
@override
String toString() {
return 'ScanResultModel(skuID: $skuID, skuCode: $skuCode, skuName: $skuName, brandName: $brandName, brandImg: $brandImg, goodsName: $goodsName, discount: $discount, commission: $commission, goodsImg: $goodsImg)';
return 'ScanResultModel(skuID: $skuID, skuCode: $skuCode, skuName: $skuName, brandName: $brandName, brandImg: $brandImg, goodsName: $goodsName, discount: $discount, commission: $commission, goodsImg: $goodsImg, inventory: $inventory)';
}
@override
@ -75,7 +79,8 @@ class ScanResultModel {
other.goodsName == goodsName &&
other.discount == discount &&
other.commission == commission &&
other.goodsImg == goodsImg;
other.goodsImg == goodsImg &&
other.inventory == inventory;
}
@override
@ -88,6 +93,7 @@ class ScanResultModel {
goodsName.hashCode ^
discount.hashCode ^
commission.hashCode ^
goodsImg.hashCode;
goodsImg.hashCode ^
inventory.hashCode;
}
}

@ -1,62 +1,40 @@
import 'package:flutter/material.dart';
import 'package:recook/constants/api_v2.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/models/scan_result_model.dart';
import 'package:recook/pages/home/widget/plus_minus_view.dart';
import 'package:recook/widgets/custom_image_button.dart';
import 'package:recook/widgets/progress/re_toast.dart';
import 'package:recook/widgets/recook/recook_scaffold.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:recook/widgets/refresh_widget.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:recook/const/resource.dart';
class QRScarerResultPage extends StatefulWidget {
final String code;
QRScarerResultPage({Key key, this.code}) : super(key: key);
final ScanResultModel model;
QRScarerResultPage({Key key, this.model}) : super(key: key);
@override
_QRScarerResultPageState createState() => _QRScarerResultPageState();
}
class _QRScarerResultPageState extends State<QRScarerResultPage> {
ScanResultModel _scanResultModel;
bool _onload = true;
GSRefreshController _refreshController;
int _goodsCount = 1;
@override
void initState() {
super.initState();
_refreshController = GSRefreshController(initialRefresh: true);
}
@override
void dispose() {
super.dispose();
_refreshController?.dispose();
}
@override
Widget build(BuildContext context) {
return RecookScaffold(
title: '扫码购物',
body: RefreshWidget(
controller: _refreshController,
onRefresh: () async {
_scanResultModel = await _getScanModel();
if (_scanResultModel != null) {
_onload = false;
} else {
ReToast.err(text: '未获取数据');
}
setState(() {});
},
body: _onload
? emptyWidget()
: ListView(
padding: EdgeInsets.symmetric(vertical: 22.w, horizontal: 20.w),
children: [_goodsCard(_scanResultModel)],
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 22.w, horizontal: 20.w),
children: [_goodsCard(widget.model)],
),
bottomNavi: Row(
children: [_shopButton().expand(), 2.widthBox, _buyButton().expand()],
@ -95,7 +73,7 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
children: [
FadeInImage.assetNetwork(
placeholder: R.ASSETS_PLACEHOLDER_NEW_1X1_A_PNG,
image: model.brandImg,
image: model.goodsImg,
width: 200.w,
height: 200.w,
fit: BoxFit.contain,
@ -103,10 +81,12 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
20.w.widthBox,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
model.goodsName.text
.size(28.sp)
.bold
.lineHeight(1)
.color(Color(0xFF141414))
.maxLines(2)
.overflow(TextOverflow.ellipsis)
@ -126,7 +106,7 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
30.w.heightBox,
Row(
children: [
'¥'
'¥ '
.richText
.withTextSpanChildren([
'${model.discount.toStringAsFixed(0)}.'
@ -135,10 +115,9 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
.color(Color(0xFFC92219))
.bold
.make(),
((model.discount.toDouble() -
model.commission.toInt()) *
100)
.toStringAsFixed(0)
model.discount
.toStringAsFixed(2)
.split('.')[1]
.textSpan
.color(Color(0xFFC92219))
.size(24.sp)
@ -150,22 +129,26 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
.bold
.make(),
8.w.widthBox,
'赚:${model.commission.toStringAsFixed(2)}'.text.color(Color(0xFFC92219)).size(24.sp).make()
// Spacer(),
// PlusMinusView(
// onValueChanged: (value) {
// _goodsCount = value;
// setState(() {});
// },
// initialValue: 1,
// onInputComplete: (text) {
// _goodsCount = int.parse(text);
// },
// )
'${model.commission.toStringAsFixed(2)}'
.text
.color(Color(0xFFC92219))
.bold
.size(24.sp)
.make(),
PlusMinusView(
onValueChanged: (value) {
_goodsCount = value;
},
initialValue: 1,
maxValue: getMaxGoodsCount,
onInputComplete: (text) {
_goodsCount = int.parse(text);
},
).expand()
],
)
],
),
).expand(),
],
)
],
@ -182,16 +165,12 @@ class _QRScarerResultPageState extends State<QRScarerResultPage> {
return Container();
}
Future _getScanModel() async {
ResultData resultData =
await HttpManager.post(APIV2.userAPI.getScanResult, {
"skuCode": widget.code,
});
if (resultData.data == null) {
ReToast.err(text: resultData.msg);
return;
int get getMaxGoodsCount {
if (widget.model?.inventory == null) {
ReToast.err(text: '库存数量错误');
return 1;
} else {
return ScanResultModel.fromMap(resultData.data['data']);
return widget.model.inventory < 50 ? widget.model.inventory : 50;
}
}

@ -54,9 +54,9 @@ class _PlusMinusViewState extends State<PlusMinusView> {
@override
Widget build(BuildContext context) {
if (widget.initialValue != null) {
_controller.text = widget.initialValue.toString();
}
// if (widget.initialValue != null) {
// _controller.text = widget.initialValue.toString();
// }
return GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {},

@ -10,8 +10,10 @@ import 'package:just_audio/just_audio.dart';
import 'package:recook/base/base_store_state.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/api_v2.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/models/base_model.dart';
import 'package:recook/models/scan_result_model.dart';
import 'package:recook/pages/home/barcode/fail_barcode_page.dart';
import 'package:recook/pages/home/barcode/photos_fail_barcode_page.dart';
import 'package:recook/pages/home/barcode/qr_scaner_result_page.dart';
@ -19,6 +21,7 @@ import 'package:recook/pages/home/classify/commodity_detail_page.dart';
import 'package:recook/utils/app_router.dart';
import 'package:recook/utils/image_utils.dart';
import 'package:recook/utils/text_utils.dart';
import 'package:recook/widgets/progress/re_toast.dart';
// import 'package:flutter_audio_player/flutter_audio_player.dart';
@ -112,17 +115,9 @@ class _BarcodeScanPageState extends BaseStoreState<BarcodeScanPage> {
if (!TextUtils.isEmpty(data)) {
_playSound();
_key.currentState.stopScan();
Get.off(() => QRScarerResultPage(
code: data,
));
// Future.delayed(Duration(milliseconds: 500), () {
// _getGoodsWithCode(data, (goodsId) {
// // AppRouter.pushAndReplaced(globalContext, RouteName.COMMODITY_PAGE,
// // arguments: CommodityDetailPage.setArguments(int.parse(goodsId)));
// return;
// }, image: image);
// });
Future.delayed(Duration(milliseconds: 500), () async {
await _getGoodsWithCode(data, image: image);
});
} else {
_key.currentState.startScan();
}
@ -133,9 +128,10 @@ class _BarcodeScanPageState extends BaseStoreState<BarcodeScanPage> {
player.play();
}
_getGoodsWithCode(String code, Function callBack, {File image}) async {
ResultData resultData = await HttpManager.post(GoodsApi.goods_code_search, {
"code": code,
_getGoodsWithCode(String code, {File image}) async {
ResultData resultData =
await HttpManager.post(APIV2.userAPI.getScanResult, {
"skuCode": code,
});
if (!resultData.result) {
pushToFailPage(code, resultData.msg, image);
@ -146,11 +142,19 @@ class _BarcodeScanPageState extends BaseStoreState<BarcodeScanPage> {
pushToFailPage(code, model.msg, image);
return;
}
String goodsId = resultData.data['data']['goodsId'].toString();
if (TextUtils.isEmpty(goodsId)) {
// String goodsId = resultData.data['data']['goodsId'].toString();
// if (TextUtils.isEmpty(goodsId)) {
// return;
// }
ScanResultModel scanResultModel =
ScanResultModel.fromMap(resultData.data['data']);
if (scanResultModel == null) {
pushToFailPage(code, model.msg, image);
return;
}
callBack(goodsId);
Get.off(() => QRScarerResultPage(
model: scanResultModel,
));
return;
}

Loading…
Cancel
Save