select method
Selecting and unselecting entities
Implementation
@internal
void select(
BuildContext context,
DrishyaEntity entity, {
bool edited = false,
}) {
// Check limit
if (reachedMaximumLimit) {
UIHandler.of(context).showSnackBar(
'Maximum selection limit of '
'${setting.maximumCount} has been reached!',
);
return;
}
// Handle single selection mode
if (singleSelection) {
if (_setting.selectionMode == SelectionMode.actionBased) {
editEntity(context, entity).then((ety) {
if (ety != null) {
_onChanged?.call(ety, false);
completeTask(context, items: [ety]);
}
});
} else {
_onChanged?.call(entity, false);
completeTask(context, items: [entity]);
}
return;
}
final entities = value.selectedEntities.toList();
final isSelected = entities.contains(entity);
// Unselect item if selected previously
if (isSelected) {
_onChanged?.call(entity, true);
entities.remove(entity);
_internal = true;
value = value.copyWith(selectedEntities: entities);
return;
}
// Unselect previous item and continue if it was edited
if (edited && entities.isNotEmpty) {
final item = entities.last;
_onChanged?.call(item, true);
entities.remove(item);
}
entities.add(entity);
_onChanged?.call(entity, false);
_internal = true;
value = value.copyWith(selectedEntities: entities);
}