clickItemIndex<T extends BaseChooseItemModel> static method
void
clickItemIndex<T extends BaseChooseItemModel>(})
Implementation
static void clickItemIndex<T extends BaseChooseItemModel>(
int itemIndex, {
required int maxChooseCount, // 最大选择数量(1代表单选)
required List<T> sourceItems,
required List<T> currentSelectedItems,
required void Function(int count)? beyondMaxChooseCount,
required void Function(List<T> selectedItemModels) onValueChange,
}) {
T item = sourceItems[itemIndex];
// 1、判断点击是之前选中的还是新选中的
T? hasChoosedItem;
try {
hasChoosedItem =
currentSelectedItems.firstWhere((element) => element.id == item.id);
} catch (e) {
hasChoosedItem = null;
}
if (hasChoosedItem != null) {
// 点击的 item 之前已选中
currentSelectedItems.remove(hasChoosedItem);
} else {
// 点击的 item 之前未选中
// ① 如果是单选
if (maxChooseCount == 1) {
currentSelectedItems.clear();
} else {
// ② 多选,如果是执行选中,提前判断是否会超过
if (currentSelectedItems.length >= maxChooseCount) {
// 如果是多选又超过最大个数
beyondMaxChooseCount?.call(currentSelectedItems.length);
return;
}
}
currentSelectedItems.add(item);
}
onValueChange(currentSelectedItems);
}