[FIX] Fixed disabled items status in chip selector

This commit is contained in:
2024-05-16 19:56:23 +03:00
parent ac0006494b
commit cb4d939d7e

View File

@@ -180,16 +180,16 @@ class _AstromicChipSelectorState<T> extends State<AstromicChipSelector<T>> {
AstromicChipSelectorConfiguration configuration = widget.configuration ?? const AstromicChipSelectorConfiguration(); AstromicChipSelectorConfiguration configuration = widget.configuration ?? const AstromicChipSelectorConfiguration();
// //
int currentIndex = widget.items.indexOf(currentItem); int currentIndex = widget.items.indexOf(currentItem);
T? previousItem = currentIndex == 0 ? null : widget.items[widget.items.indexOf(currentItem) - 1].$1; (T item, bool isEnabled)? previousItem = currentIndex == 0 ? null : widget.items[widget.items.indexOf(currentItem) - 1];
T? nextItem = currentIndex == widget.items.length - 1 ? null : widget.items[widget.items.indexOf(currentItem) + 1].$1; (T item, bool isEnabled)? nextItem = currentIndex == widget.items.length - 1 ? null : widget.items[widget.items.indexOf(currentItem) + 1];
bool isConsequent = configuration.isConsequent; bool isConsequent = configuration.isConsequent;
// //
bool isEnabled = currentItem.$2; bool isEnabled = currentItem.$2;
bool isSelected = selectedItems.contains(currentItem.$1); bool isSelected = selectedItems.contains(currentItem.$1);
bool isPreviousItemSelected = selectedItems.contains(previousItem); bool isPreviousItemSelected = selectedItems.contains(previousItem?.$1);
bool isPreviousItemDisabled = currentIndex == 0 ? false : !widget.items[widget.items.indexOf(currentItem) - 1].$2; bool isPreviousItemDisabled = !(previousItem?.$2 ?? false);
bool isNextItemSelected = selectedItems.contains(nextItem); bool isNextItemSelected = selectedItems.contains(nextItem?.$1);
bool isNextItemDisabled = currentIndex == widget.items.length - 1 ? false : !widget.items[widget.items.indexOf(currentItem) + 1].$2; bool isNextItemDisabled = !(nextItem?.$2 ?? false);
// --- // ---
bool canBeSelected = bool canBeSelected =
(isConsequent && isEnabled && !isSelected && selectedItems.length < (configuration.maxSelectedItems) && (isPreviousItemSelected || currentIndex == 0 || isPreviousItemDisabled)) || (isConsequent && isEnabled && !isSelected && selectedItems.length < (configuration.maxSelectedItems) && (isPreviousItemSelected || currentIndex == 0 || isPreviousItemDisabled)) ||
@@ -202,6 +202,9 @@ class _AstromicChipSelectorState<T> extends State<AstromicChipSelector<T>> {
bool canShowClear = configuration.withClearButton && canbeUnselected; bool canShowClear = configuration.withClearButton && canbeUnselected;
// --- // ---
// //
debugPrint(
'item: ${currentItem.$1}, isEnabled: ${currentItem.$2}, canBeSelected: $canBeSelected, canBeUnselected: $canbeUnselected, previous disabled: $isPreviousItemDisabled, next disabled: $isNextItemDisabled');
//
return widget.itemBuilder( return widget.itemBuilder(
currentItem.$1, currentItem.$1,
isEnabled, isEnabled,