diff --git a/lib/pages/live/live_stream/live_sku_widget.dart b/lib/pages/live/live_stream/live_sku_widget.dart new file mode 100644 index 0000000..c51bd41 --- /dev/null +++ b/lib/pages/live/live_stream/live_sku_widget.dart @@ -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; + final List skus; + final Function(List 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 { + List 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(), + ); + } +} diff --git a/lib/pages/live/live_stream/show_goods_list.dart b/lib/pages/live/live_stream/show_goods_list.dart index bc8ca1b..02e9690 100644 --- a/lib/pages/live/live_stream/show_goods_list.dart +++ b/lib/pages/live/live_stream/show_goods_list.dart @@ -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 { 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 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( diff --git a/pubspec.yaml b/pubspec.yaml index a69d633..2125e1c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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