[DEV] Fused disabled item builder to the item builder.

This commit is contained in:
2024-05-16 18:40:43 +03:00
parent 6e7923eede
commit 0f4ca3d050
3 changed files with 17 additions and 37 deletions

View File

@@ -14,8 +14,7 @@ class AstromicSelectors {
// //
double? itemSpacing = 4, double? itemSpacing = 4,
// //
required Widget Function(T item, {VoidCallback? onTap, bool isSelected}) itemBuilder, required Widget Function(T item, bool isEnabled, bool isSelected, VoidCallback? onTap) itemBuilder,
Widget Function(T item)? disabledItemBuilder,
required List<(T item, bool isEnabled)> items, required List<(T item, bool isEnabled)> items,
}) => }) =>
AstromicRadioSelector<T>( AstromicRadioSelector<T>(
@@ -27,7 +26,6 @@ class AstromicSelectors {
itemSpacing: itemSpacing ?? 8.0, itemSpacing: itemSpacing ?? 8.0,
// //
itemBuilder: itemBuilder, itemBuilder: itemBuilder,
disabledItemBuilder: disabledItemBuilder,
items: items, items: items,
); );
@@ -41,15 +39,9 @@ class AstromicSelectors {
// //
double? itemSpacing = 4, double? itemSpacing = 4,
double? runSpacing = 8, double? runSpacing = 8,
double? clearSpacing = 4,
//
TextStyle? labelStyle,
TextStyle? selectedLabelStyle,
TextStyle? disabledLabelStyle,
// //
required List<(T item, bool isEnabled)> items, required List<(T item, bool isEnabled)> items,
required Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder, required Widget Function(T item, bool isEnabled, bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped) itemBuilder,
required Widget Function(T item) disabledItemBuilder,
Widget Function(List<Widget> items)? groupBuilder, Widget Function(List<Widget> items)? groupBuilder,
}) { }) {
assert( assert(
@@ -65,7 +57,6 @@ class AstromicSelectors {
// //
items: items, items: items,
itemBuilder: itemBuilder, itemBuilder: itemBuilder,
disabledItemBuilder: disabledItemBuilder,
groupBuilder: groupBuilder!, groupBuilder: groupBuilder!,
) )
: AstromicChipSelector( : AstromicChipSelector(
@@ -79,7 +70,6 @@ class AstromicSelectors {
// //
items: items, items: items,
itemBuilder: itemBuilder, itemBuilder: itemBuilder,
disabledItemBuilder: disabledItemBuilder,
); );
} }
} }

View File

@@ -34,8 +34,7 @@ class AstromicChipSelector<T> extends StatefulWidget {
//s1 -- Content //s1 -- Content
final List<(T item, bool isEnabled)> items; final List<(T item, bool isEnabled)> items;
// //
final Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder; final Widget Function(T item, bool isEnabled, bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped) itemBuilder;
final Widget Function(T item) disabledItemBuilder;
final Widget Function(List<Widget> items)? groupBuilder; final Widget Function(List<Widget> items)? groupBuilder;
//!SECTION //!SECTION
// //
@@ -53,7 +52,6 @@ class AstromicChipSelector<T> extends StatefulWidget {
//s1 -- Content //s1 -- Content
required this.items, required this.items,
required this.itemBuilder, required this.itemBuilder,
required this.disabledItemBuilder,
this.groupBuilder, this.groupBuilder,
}) : assert( }) : assert(
(configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)), (configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)),
@@ -77,8 +75,7 @@ class AstromicChipSelector<T> extends StatefulWidget {
//s1 -- Content //s1 -- Content
required final List<(T item, bool isEnabled)> items, required final List<(T item, bool isEnabled)> items,
// //
required final Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder, required final Widget Function(T item, bool isEnabled, bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped) itemBuilder,
required final Widget Function(T item) disabledItemBuilder,
required final Widget Function(List<Widget> items) groupBuilder, required final Widget Function(List<Widget> items) groupBuilder,
}) { }) {
assert((configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)), assert((configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)),
@@ -96,7 +93,6 @@ class AstromicChipSelector<T> extends StatefulWidget {
// //
items: items, items: items,
itemBuilder: itemBuilder, itemBuilder: itemBuilder,
disabledItemBuilder: disabledItemBuilder,
groupBuilder: groupBuilder, groupBuilder: groupBuilder,
); );
} }
@@ -201,14 +197,13 @@ class _AstromicChipSelectorState<T> extends State<AstromicChipSelector<T>> {
bool canShowClear = _configuration.withClearButton && canbeUnselected; bool canShowClear = _configuration.withClearButton && canbeUnselected;
// --- // ---
// //
return isEnabled return widget.itemBuilder(
? widget.itemBuilder(
currentItem.$1, currentItem.$1,
isSelected: isSelected, isEnabled,
onTap: tapable ? () => _onTap(currentItem.$1) : null, isSelected,
onClearTapped: canShowClear ? _onTapClear(currentItem.$1) : null, tapable ? () => _onTap(currentItem.$1) : null,
) canShowClear ? _onTapClear(currentItem.$1) : null,
: widget.disabledItemBuilder(currentItem.$1); );
}).toList(); }).toList();
//s1 -Widgets //s1 -Widgets
//!SECTION //!SECTION

View File

@@ -32,8 +32,7 @@ class AstromicRadioSelector<T> extends StatefulWidget {
//s1 -- Content //s1 -- Content
final List<(T item, bool isEnabled)> items; final List<(T item, bool isEnabled)> items;
// //
final Widget Function(T item, {VoidCallback? onTap, bool isSelected}) itemBuilder; final Widget Function(T item, bool isEnabled, bool isSelected, VoidCallback? onTap) itemBuilder;
final Widget Function(T item)? disabledItemBuilder;
//!SECTION //!SECTION
// //
AstromicRadioSelector({ AstromicRadioSelector({
@@ -48,7 +47,6 @@ class AstromicRadioSelector<T> extends StatefulWidget {
required this.itemSpacing, required this.itemSpacing,
//s1 -- Content //s1 -- Content
required this.itemBuilder, required this.itemBuilder,
this.disabledItemBuilder,
}) : assert(configuration.isNullable || initialSelectedValue != null, 'You need to supply an initial value if not nullable!'), }) : assert(configuration.isNullable || initialSelectedValue != null, 'You need to supply an initial value if not nullable!'),
assert( assert(
configuration.isNullable || configuration.isNullable ||
@@ -131,16 +129,13 @@ class _AstromicRadioSelectorState<T> extends State<AstromicRadioSelector<T>> {
// //
//s1 -Widgets //s1 -Widgets
List<Widget> baseChildren = widget.items.map((currentItem) { List<Widget> baseChildren = widget.items.map((currentItem) {
T item = currentItem.$1;
bool isEnabled = currentItem.$2; bool isEnabled = currentItem.$2;
bool isSelected = currentItem.$1 == selectedItem; bool isSelected = item == selectedItem;
// //
return !isEnabled && widget.disabledItemBuilder != null return widget.configuration.withExpandedSpace && widget.configuration.axis == Axis.horizontal
? widget.configuration.withExpandedSpace && widget.configuration.axis == Axis.horizontal ? Expanded(child: widget.itemBuilder(item, isEnabled, isSelected, isEnabled ? () => _onTap(item) : null))
? Expanded(child: widget.disabledItemBuilder!(currentItem.$1)) : widget.itemBuilder(item, isEnabled, isSelected, isEnabled ? () => _onTap(item) : null);
: widget.disabledItemBuilder!(currentItem.$1)
: widget.configuration.withExpandedSpace && widget.configuration.axis == Axis.horizontal
? Expanded(child: widget.itemBuilder(currentItem.$1, onTap: isEnabled ? () => _onTap(currentItem.$1) : null, isSelected: isSelected))
: widget.itemBuilder(currentItem.$1, onTap: isEnabled ? () => _onTap(currentItem.$1) : null, isSelected: isSelected);
}).toList(); }).toList();
//s1 -Widgets //s1 -Widgets
//!SECTION //!SECTION