toggleMultiSelectValue method

void toggleMultiSelectValue(
  1. String fieldId, {
  2. List<String> toggleOn = const [],
  3. List<String> toggleOff = const [],
})

Implementation

void toggleMultiSelectValue(
  String fieldId, {
  List<String> toggleOn = const [],
  List<String> toggleOff = const [],
}) {
  final field =
      fields.firstWhereOrNull((fieldData) => fieldData.id == fieldId);


  if (field == null || field is! ChampionOptionSelect) {
    debugPrint("Tried to toggle values on a field that doesn't seem to exist: $fieldId");
    return;
  }

  final List<MultiselectOption> selectOptions = field.options
      .where((option) => toggleOn.contains(option.value))
      .toList();

  final List<MultiselectOption> deSelectOptions = field.options
      .where((option) => toggleOn.contains(option.value))
      .toList();
  // Run the logic to add and remove these values
  final reference = findMultiselectValueIndex(id);

  if (reference == null) {
   multiselectValues = [
     MultiselectFormFieldValueById(
       id: field.id,
       values: selectOptions,
     ),
     ...multiselectValues,];
  } else {

  multiselectValues[reference] = MultiselectFormFieldValueById(
      id: multiselectValues[reference].id,
      values: [
        // original values minus the addition and subtracted values
        // Leave original selections intact
        ...multiselectValues[reference].values.where((value) =>
            !selectOptions.any((selected) => selected.value == value.value) &&
            !deSelectOptions
                .any((deSelected) => deSelected.value == value.value)),

        // The new values we're adding in
        ...selectOptions,
      ]);
  }

  notifyListeners();
}