diff --git a/lib/ui/shared/options_picker.dart b/lib/ui/shared/options_picker.dart index be49215..c242243 100644 --- a/lib/ui/shared/options_picker.dart +++ b/lib/ui/shared/options_picker.dart @@ -1,38 +1,33 @@ import 'package:flutter/material.dart'; -import '../../api/api.dart'; - -class SingleOptionPicker extends StatelessWidget { - const SingleOptionPicker( - {Key? key, required this.options, required this.setSingleOption}) - : super(key: key); - final Map options; - final Function(T) setSingleOption; - - @override - Widget build(BuildContext context) { - return OptionsPicker( - options: options, - setOption: (Set options) => setSingleOption(options.first), - allowsMultiple: false, - ); - } -} +import '../../api/api.dart'; class OptionsPicker extends StatefulWidget { const OptionsPicker( {required this.options, - required this.setOption, + required this.onSelected, this.allowsMultiple = false, Key? key}) : super(key: key); final Map options; - final Function(Set) setOption; + final Function(Set) onSelected; final bool allowsMultiple; @override _OptionsPickerState createState() => _OptionsPickerState(); + + factory OptionsPicker.single({ + Key? key, + required Map options, + required Function(T) onSelected, + }) => + OptionsPicker( + key: key, + options: options, + onSelected: (Set options) => onSelected(options.first), + allowsMultiple: false, + ); } class _OptionsPickerState @@ -102,7 +97,7 @@ class _OptionsPickerState _selectedOptionsNames.add(optionsList[index]); } - widget.setOption(_selectedOptionsNames); + widget.onSelected(_selectedOptionsNames); }); }, ); diff --git a/lib/ui/shop/product.dart b/lib/ui/shop/product.dart index 4489d2e..14fa64a 100644 --- a/lib/ui/shop/product.dart +++ b/lib/ui/shop/product.dart @@ -1,16 +1,16 @@ import 'dart:math'; +import 'package:carousel_slider/carousel_slider.dart'; import 'package:dash_fanclub_app/ui/shared/whitespace.dart'; import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; import 'package:google_fonts/google_fonts.dart'; -import '../../api/shop_inventory.dart'; -import '../../api/bag_item.dart'; -import 'package:carousel_slider/carousel_slider.dart'; -import 'package:google_fonts/google_fonts.dart'; + +import '../../api/api.dart'; import '../../api/bag.dart'; -import 'package:get_it/get_it.dart'; +import '../../api/bag_item.dart'; +import '../../api/shop_inventory.dart'; import '../shared/shared.dart'; -import '../../api/api.dart'; GetIt getIt = GetIt.instance; @@ -108,24 +108,24 @@ class _ProductPageState extends State { ), const SizedBox(height: 15), Center( - child: SingleOptionPicker( + child: OptionsPicker.single( options: widget.product.sizes.map( (String name, int quantity) => MapEntry( ProductSize(name), quantity)), - setSingleOption: setSize, + onSelected: setSize, ), ), const SizedBox(height: 15), Center( - child: SingleOptionPicker( + child: OptionsPicker.single( options: const { ProductColor(name: "DashBlue", color: Colors.blue): 5, ProductColor(name: "Black", color: Colors.black): 9, ProductColor(name: "Pink", color: Colors.pink): 10, ProductColor(name: "Orange", color: Colors.orange): 4, }, - setSingleOption: setColor, + onSelected: setColor, ), ), const SizedBox(height: 15),