select method

  1. @internal
void select(
  1. BuildContext context,
  2. DrishyaEntity entity, {
  3. bool edited = false,
})

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);
}