options_item.dart
class OptionsItem {
String productOptionCategGuid;
String categoryName;
String minSelectionRequired;
String maxSelectionLimit;
String selectedOption; //To store selected options
List<Items> items;
OptionsItem({
this.productOptionCategGuid,
this.categoryName,
this.minSelectionRequired,
this.maxSelectionLimit,
this.selectedOption,
this.items,
});
OptionsItem.fromJson(Map<String, dynamic> json) {
this.productOptionCategGuid = json["ProductOptionCategGUID"].toString();
this.categoryName = json["CategoryName"].toString();
this.minSelectionRequired = json["MinSelectionRequired"].toString();
this.maxSelectionLimit = json["MaxSelectionLimit"].toString();
this.selectedOption = json["selectedOption"].toString();
this.items = json["Items"] == null
? []
: (json["Items"] as List).map((e) => Items.fromJson(e)).toList();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data["ProductOptionCategGUID"] = this.productOptionCategGuid;
data["CategoryName"] = this.categoryName;
data["MinSelectionRequired"] = this.minSelectionRequired;
data["MaxSelectionLimit"] = this.maxSelectionLimit;
data["selectedOption"] = this.selectedOption;
if (this.items != null)
data["Items"] = this.items.map((e) => e.toJson()).toList();
return data;
}
}
items.dart
class Items {
String optionItemGuid;
String optionItemName;
String price;
Items({this.optionItemGuid, this.optionItemName, this.price});
Items.fromJson(Map<String, dynamic> json) {
this.optionItemGuid = json["OptionItemGuid"].toString();
this.optionItemName = json["OptionItemName"].toString();
this.price = json["Price"].toString();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data["OptionItemGuid"] = this.optionItemGuid;
data["OptionItemName"] = this.optionItemName;
data["Price"] = this.price;
return data;
}
}
widget_item_flavour.dart
class WidgetItemFlavour extends StatefulWidget {
final OptionsItem item;
WidgetItemFlavour({this.item});
@override
_WidgetItemFlavourState createState() => _WidgetItemFlavourState();
}
class _WidgetItemFlavourState extends State<WidgetItemFlavour> {
String _selectedFlavour = '';
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
// WAY 1
/* children: flavourList
.map((data) => RadioListTile(
dense: true,
activeColor: greenColor,
contentPadding: EdgeInsets.zero,
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"${data.flavourName}",
style: TextStyle(color: black2, fontSize: 15),
),
Text(
"${data.flavourPrice}",
style: TextStyle(color: black2, fontSize: 15),
),
],
),
groupValue: _selectedFlavour,
value: data.flavourId,
onChanged: (val) {
setState(() {
print('Val: ' + val.toString());
_selectedFlavour = val;
});
},
))
.toList(), */
//WAY 2
children: widget.item.items
.map((data) => InkWell(
onTap: () {
setState(() {
//var index = widget.item.items.indexOf(data);
//print('Ketan Index: ' + index.toString());
widget.item.selectedOption = data.optionItemGuid;
_selectedFlavour = data.optionItemGuid;
});
},
child: Row(
children: [
Radio(
activeColor: greenColor,
fillColor: MaterialStateProperty.all<Color>(greenColor),
visualDensity:
VisualDensity(horizontal: -4, vertical: -3),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
value:
_selectedFlavour.trim() == data.optionItemGuid.trim()
? true
: false,
groupValue: true,
onChanged: (value) {},
),
SizedBox(width: 10),
Expanded(
child: Text(
"${data.optionItemName}",
style: TextStyle(color: black2, fontSize: 14),
),
),
Text(
"$currency_sign${data.price}",
style: TextStyle(color: black2, fontSize: 14),
),
],
),
))
.toList(),
);
}
}