FormeChoiceChip<T extends Object> constructor

FormeChoiceChip<T extends Object>({
  1. T? initialValue,
  2. required String name,
  3. bool readOnly = false,
  4. required List<FormeChipItem<T>> items,
  5. Key? key,
  6. InputDecoration? decoration,
  7. FormeFieldDecorator<T?>? decorator,
  8. int? order,
  9. bool quietlyValidate = false,
  10. Duration? asyncValidatorDebounce,
  11. AutovalidateMode? autovalidateMode,
  12. FormeFieldStatusChanged<T?>? onStatusChanged,
  13. dynamic onInitialed,
  14. FormeFieldSetter<T?>? onSaved,
  15. FormeValidator<T?>? validator,
  16. FormeAsyncValidator<T?>? asyncValidator,
  17. ChipThemeData? chipThemeData,
  18. Axis direction = Axis.horizontal,
  19. WrapAlignment alignment = WrapAlignment.start,
  20. WrapAlignment runAlignment = WrapAlignment.start,
  21. double runSpacing = 0.0,
  22. double spacing = 0.0,
  23. WrapCrossAlignment crossAxisAlignment = WrapCrossAlignment.start,
  24. TextDirection? textDirection,
  25. VerticalDirection verticalDirection = VerticalDirection.down,
  26. bool requestFocusOnUserInteraction = true,
  27. bool registrable = true,
  28. bool enabled = true,
  29. dynamic valueUpdater,
  30. FormeFieldValidationFilter<T?>? validationFilter,
  31. FocusNode? focusNode,
})

Implementation

FormeChoiceChip({
  T? initialValue,
  required String name,
  bool readOnly = false,
  required this.items,
  Key? key,
  InputDecoration? decoration,
  FormeFieldDecorator<T?>? decorator,
  int? order,
  bool quietlyValidate = false,
  Duration? asyncValidatorDebounce,
  AutovalidateMode? autovalidateMode,
  FormeFieldStatusChanged<T?>? onStatusChanged,
  FormeFieldInitialed<T?>? onInitialed,
  FormeFieldSetter<T?>? onSaved,
  FormeValidator<T?>? validator,
  FormeAsyncValidator<T?>? asyncValidator,
  ChipThemeData? chipThemeData,
  Axis direction = Axis.horizontal,
  WrapAlignment alignment = WrapAlignment.start,
  WrapAlignment runAlignment = WrapAlignment.start,
  double runSpacing = 0.0,
  double spacing = 0.0,
  WrapCrossAlignment crossAxisAlignment = WrapCrossAlignment.start,
  TextDirection? textDirection,
  VerticalDirection verticalDirection = VerticalDirection.down,
  bool requestFocusOnUserInteraction = true,
  bool registrable = true,
  bool enabled = true,
  FormeFieldValueUpdater<T?>? valueUpdater,
  FormeFieldValidationFilter<T?>? validationFilter,
  FocusNode? focusNode,
}) : super(
        focusNode: focusNode,
        validationFilter: validationFilter,
        valueUpdater: valueUpdater,
        enabled: enabled,
        registrable: registrable,
        requestFocusOnUserInteraction: requestFocusOnUserInteraction,
        order: order,
        quietlyValidate: quietlyValidate,
        asyncValidatorDebounce: asyncValidatorDebounce,
        autovalidateMode: autovalidateMode,
        onStatusChanged: onStatusChanged,
        onInitialed: onInitialed,
        onSaved: onSaved,
        validator: validator,
        asyncValidator: asyncValidator,
        key: key,
        decorator: decorator ??
            (decoration == null
                ? null
                : FormeInputDecoratorBuilder(decoration: decoration)),
        readOnly: readOnly,
        name: name,
        initialValue: initialValue,
        builder: (state) {
          final bool readOnly = state.readOnly;
          final ChipThemeData _chipThemeData =
              chipThemeData ?? ChipTheme.of(state.context);
          final List<Widget> chips = [];
          for (final FormeChipItem<T> item in items) {
            final bool isReadOnly = readOnly || item.readOnly;
            final ChoiceChip chip = ChoiceChip(
              selected: state.value == item.data,
              label: item.label,
              avatar: item.avatar,
              padding: item.padding,
              pressElevation: item.pressElevation,
              tooltip: item.tooltip ?? item.tooltip,
              materialTapTargetSize: item.materialTapTargetSize,
              avatarBorder: item.avatarBorder ?? const CircleBorder(),
              backgroundColor: item.backgroundColor,
              shadowColor: item.shadowColor,
              disabledColor: item.disabledColor,
              selectedColor: item.selectedColor,
              selectedShadowColor: item.selectedShadowColor,
              visualDensity: item.visualDensity,
              elevation: item.elevation,
              labelPadding: item.labelPadding,
              labelStyle: item.labelStyle,
              shape: item.shape,
              side: item.side,
              onSelected: isReadOnly
                  ? null
                  : (bool selected) {
                      if (state.value == item.data) {
                        state.didChange(null);
                      } else {
                        state.didChange(item.data);
                      }
                      state.requestFocusOnUserInteraction();
                    },
            );
            chips.add(Visibility(
                visible: item.visible,
                child: Padding(
                  padding: item.padding,
                  child: chip,
                )));
          }

          final Widget chipWidget = Wrap(
            spacing: spacing,
            runSpacing: runSpacing,
            textDirection: textDirection,
            crossAxisAlignment: crossAxisAlignment,
            verticalDirection: verticalDirection,
            alignment: alignment,
            direction: direction,
            runAlignment: runAlignment,
            children: chips,
          );
          return Focus(
            focusNode: state.focusNode,
            child: ChipTheme(
              data: _chipThemeData,
              child: chipWidget,
            ),
          );
        },
      );