直播页面多SKU完成

master
laiiihz 5 years ago
parent 71e8175cb2
commit 5c51aad205

@ -0,0 +1,115 @@
import 'package:flutter/material.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/models/goods_detail_model.dart'
show Attributes, Children, Sku;
class LiveSKUWidget extends StatefulWidget {
final List<Attributes> attributes;
final List<Sku> skus;
final Function(List<Children> children) onPick;
LiveSKUWidget(
{Key key,
@required this.attributes,
@required this.skus,
@required this.onPick})
: super(key: key);
@override
_LiveSKUWidgetState createState() => _LiveSKUWidgetState();
}
class _LiveSKUWidgetState extends State<LiveSKUWidget> {
List<Children> attrs = [];
@override
void initState() {
super.initState();
attrs = widget.attributes.map((e) => e.children.first).toList();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: widget.attributes
.map((attr) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
attr.name,
style: TextStyle(
color: Color(0xFF141414),
fontSize: rSP(14),
fontWeight: FontWeight.bold,
),
),
_AttrPicker(
attr: attr,
onPick: (Children oldAttr, Children pickedAttr) {
int index = attrs
.indexWhere((element) => element.id == oldAttr.id);
attrs[index] = pickedAttr;
widget.onPick(attrs);
},
),
],
))
.toList(),
);
}
}
class _AttrPicker extends StatefulWidget {
final Attributes attr;
final Function(Children oldAttr, Children pickedAttr) onPick;
_AttrPicker({Key key, @required this.attr, @required this.onPick})
: super(key: key);
@override
__AttrPickerState createState() => __AttrPickerState();
}
class __AttrPickerState extends State<_AttrPicker> {
Children pickedChild;
@override
void initState() {
pickedChild = widget.attr.children.first;
super.initState();
}
@override
Widget build(BuildContext context) {
return Wrap(
children: widget.attr.children
.map((e) => MaterialButton(
padding: EdgeInsets.symmetric(horizontal: rSize(5)),
shape: RoundedRectangleBorder(
side: BorderSide(
color: pickedChild.id == e.id
? Color(0xFFC92219)
: Color(0xFF999999),
),
borderRadius: BorderRadius.circular(rSize(2)),
),
minWidth: 0,
height: rSize(22),
child: Text(
e.value,
style: TextStyle(
color: pickedChild.id == e.id
? Color(0xFFC92219)
: Color(0xFF999999),
),
),
onPressed: () {
widget.onPick(pickedChild, e);
pickedChild = e;
setState(() {});
},
))
.toList(),
);
}
}

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
@ -10,6 +11,7 @@ import 'package:recook/pages/home/classify/commodity_detail_page.dart';
import 'package:recook/pages/home/classify/mvp/goods_detail_model_impl.dart';
import 'package:recook/pages/home/classify/order_preview_page.dart';
import 'package:recook/pages/home/widget/plus_minus_view.dart';
import 'package:recook/pages/live/live_stream/live_sku_widget.dart';
import 'package:recook/pages/live/models/live_stream_info_model.dart'
show GoodsLists;
@ -540,44 +542,24 @@ class _InternalGoodsDetailState extends State<InternalGoodsDetail> {
thickness: rSize(1),
),
rHBox(15),
Text(
'尺寸',
style: TextStyle(
color: Color(0xFF141414),
fontSize: rSP(14),
fontWeight: FontWeight.bold,
),
),
Wrap(
children: goodsModel.data.sku
.map((e) => MaterialButton(
padding:
EdgeInsets.symmetric(horizontal: rSize(5)),
shape: RoundedRectangleBorder(
side: BorderSide(
color: sku.id == e.id
? Color(0xFFC92219)
: Color(0xFF999999),
),
borderRadius: BorderRadius.circular(rSize(2)),
),
minWidth: 0,
height: rSize(22),
onPressed: () {
setState(() {
sku = e;
});
},
child: Text(
e.name,
style: TextStyle(
color: sku.id == e.id
? Color(0xFFC92219)
: Color(0xFF999999),
),
),
))
.toList(),
LiveSKUWidget(
attributes: goodsModel.data.attributes,
skus: goodsModel.data.sku,
onPick: (children) {
List<int> selected = children.map((e) => e.id).toList()
..sort((itemA, itemB) => itemA.compareTo(itemB));
String tempSku = '';
selected.forEach((element) {
tempSku += ',$element';
});
int index = goodsModel.data.sku.indexWhere(
(element) => (element.combineId) == tempSku.substring(1));
if (index == -1) {
showToast('没有该物品');
} else {
sku = goodsModel.data.sku[index];
}
},
),
rHBox(15),
Row(

@ -4,8 +4,10 @@ publish_to: "none"
version: 1.2.10-dev+173
# sdk min version to 2.2.2
# to support ... feature
environment:
sdk: ">=2.1.0 <3.0.0"
sdk: ">=2.2.2 <3.0.0"
module:
androidX: true

Loading…
Cancel
Save