FormeChoiceChip<T extends Object> constructor

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

Implementation

FormeChoiceChip({
  super.key,
  super.name,
  super.initialValue,
  super.asyncValidator,
  super.asyncValidatorDebounce,
  super.autovalidateMode,
  FormeFieldDecorator<T?>? decorator,
  super.enabled = true,
  super.focusNode,
  super.onInitialized,
  super.onSaved,
  super.onStatusChanged,
  super.order,
  super.quietlyValidate = false,
  super.readOnly = false,
  super.requestFocusOnUserInteraction = true,
  super.validationFilter,
  super.validator,
  this.decoration,
  this.padding,
  this.chipThemeData,
  this.direction = Axis.horizontal,
  this.alignment = WrapAlignment.start,
  this.runAlignment = WrapAlignment.start,
  this.runSpacing = 0.0,
  this.spacing = 0.0,
  this.crossAxisAlignment = WrapCrossAlignment.start,
  this.textDirection,
  this.verticalDirection = VerticalDirection.down,
  required this.items,
}) : super.allFields(
        decorator: decorator ??
            (decoration == null
                ? null
                : FormeInputDecorationDecorator(
                    decorationBuilder: (context) => decoration,
                    childBuilder: (context, child) => Padding(
                      padding: padding ??
                          const EdgeInsets.symmetric(
                              vertical: 5, horizontal: 8),
                      child: child,
                    ),
                  )),
        builder: (state) {
          final bool readOnly = state.readOnly;
          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,
              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,
              clipBehavior: item.clipBehavior,
              surfaceTintColor: item.surfaceTintColor,
              iconTheme: item.iconTheme,
              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 ?? ChipTheme.of(state.context),
              child: chipWidget,
            ),
          );
        },
      );