[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();
//
int currentIndex = widget.items.indexOf(currentItem);
T? previousItem = currentIndex == 0 ? null : widget.items[widget.items.indexOf(currentItem) - 1].$1;
T? nextItem = currentIndex == widget.items.length - 1 ? 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 item, bool isEnabled)? nextItem = currentIndex == widget.items.length - 1 ? null : widget.items[widget.items.indexOf(currentItem) + 1];
bool isConsequent = configuration.isConsequent;
//
bool isEnabled = currentItem.$2;
bool isSelected = selectedItems.contains(currentItem.$1);
bool isPreviousItemSelected = selectedItems.contains(previousItem);
bool isPreviousItemDisabled = currentIndex == 0 ? false : !widget.items[widget.items.indexOf(currentItem) - 1].$2;
bool isNextItemSelected = selectedItems.contains(nextItem);
bool isNextItemDisabled = currentIndex == widget.items.length - 1 ? false : !widget.items[widget.items.indexOf(currentItem) + 1].$2;
bool isPreviousItemSelected = selectedItems.contains(previousItem?.$1);
bool isPreviousItemDisabled = !(previousItem?.$2 ?? false);
bool isNextItemSelected = selectedItems.contains(nextItem?.$1);
bool isNextItemDisabled = !(nextItem?.$2 ?? false);
// ---
bool canBeSelected =
(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;
// ---
//
debugPrint(
'item: ${currentItem.$1}, isEnabled: ${currentItem.$2}, canBeSelected: $canBeSelected, canBeUnselected: $canbeUnselected, previous disabled: $isPreviousItemDisabled, next disabled: $isNextItemDisabled');
//
return widget.itemBuilder(
currentItem.$1,
isEnabled,