FormBuilderSegmentedControl<T extends Object> constructor

FormBuilderSegmentedControl<T extends Object>({
  1. Key? key,
  2. required String name,
  3. FormFieldValidator<T>? validator,
  4. T? initialValue,
  5. InputDecoration decoration = const InputDecoration(),
  6. ValueChanged<T?>? onChanged,
  7. ValueTransformer<T?>? valueTransformer,
  8. bool enabled = true,
  9. FormFieldSetter<T>? onSaved,
  10. AutovalidateMode? autovalidateMode = AutovalidateMode.disabled,
  11. VoidCallback? onReset,
  12. FocusNode? focusNode,
  13. required List<FormBuilderFieldOption<T>> options,
  14. Color? borderColor,
  15. Color? selectedColor,
  16. Color? pressedColor,
  17. EdgeInsetsGeometry? padding,
  18. Color? unselectedColor,
  19. bool shouldRequestFocus = false,
})

Creates field for selection of a value from the CupertinoSegmentedControl

Implementation

FormBuilderSegmentedControl({
  super.key,
  required super.name,
  super.validator,
  super.initialValue,
  super.decoration,
  super.onChanged,
  super.valueTransformer,
  super.enabled,
  super.onSaved,
  super.autovalidateMode = AutovalidateMode.disabled,
  super.onReset,
  super.focusNode,
  required this.options,
  this.borderColor,
  this.selectedColor,
  this.pressedColor,
  this.padding,
  this.unselectedColor,
  this.shouldRequestFocus = false,
}) : super(
        builder: (FormFieldState<T?> field) {
          final state = field as _FormBuilderSegmentedControlState<T>;
          final theme = Theme.of(state.context);

          return InputDecorator(
            decoration: state.decoration,
            child: Padding(
              padding: const EdgeInsets.only(top: 10.0),
              child: CupertinoSegmentedControl<T>(
                borderColor: state.enabled
                    ? borderColor ?? theme.primaryColor
                    : theme.disabledColor,
                selectedColor: state.enabled
                    ? selectedColor ?? theme.primaryColor
                    : theme.disabledColor,
                pressedColor: state.enabled
                    ? pressedColor ?? theme.primaryColor
                    : theme.disabledColor,
                groupValue: state.value,
                children: <T, Widget>{
                  for (final option in options)
                    option.value: Padding(
                      padding: const EdgeInsets.symmetric(vertical: 10.0),
                      child: option,
                    ),
                },
                padding: padding,
                unselectedColor: unselectedColor,
                onValueChanged: (value) {
                  if (shouldRequestFocus) {
                    state.requestFocus();
                  }
                  if (state.enabled) {
                    field.didChange(value);
                  } else {
                    field.reset();
                  }
                },
              ),
            ),
          );
        },
      );