select method

void select(
  1. T value
)

Implementation

void select(T value) {
  final isMultiSelection =
      widget.variant == ShadSelectVariant.multiple ||
      widget.variant == ShadSelectVariant.multipleWithSearch;

  final prevList = controller.value.toList(growable: false);
  if (widget.closeOnSelect) popoverController.hide();
  setState(() {
    final newSet = isMultiSelection ? Set<T>.from(controller.value) : <T>{};
    if (widget.allowDeselection && prevList.contains(value)) {
      newSet.remove(value);
    } else {
      newSet.add(value);
    }
    controller.value = newSet;
  });

  final newList = controller.value.toList(growable: false);
  final changed = !ListEquality<T>().equals(prevList, newList);

  if (widget.closeOnSelect) {
    focusNode.requestFocus();
  }

  if (changed) {
    // ignore: invalid_use_of_protected_member, invalid_use_of_visible_for_testing_member
    controller.notifyListeners();
    if (isMultiSelection) {
      widget.onMultipleChanged?.call(controller.value.toSet());
    } else {
      widget.onChanged?.call(controller.value.firstOrNull);
    }
  }
}