ReactiveRangeSlider<T> constructor

ReactiveRangeSlider<T>({
  1. Key? key,
  2. String? formControlName,
  3. FormControl<T>? formControl,
  4. Map<String, ValidationMessageFunction>? validationMessages,
  5. ControlValueAccessor<T, RangeValues>? valueAccessor,
  6. ShowErrorsFunction<T>? showErrors,
  7. InputDecoration? decoration,
  8. ReactiveRangeSliderLabelBuilder? labelBuilder,
  9. ValueChanged<RangeValues>? onChanged,
  10. ValueChanged<RangeValues>? onChangeStart,
  11. ValueChanged<RangeValues>? onChangeEnd,
  12. double min = 0.0,
  13. double max = 1.0,
  14. int? divisions,
  15. RangeLabels? labels,
  16. Color? activeColor,
  17. Color? inactiveColor,
  18. SemanticFormatterCallback? semanticFormatterCallback,
  19. MaterialStateProperty<MouseCursor?>? mouseCursor,
  20. MaterialStateProperty<Color?>? overlayColor,
})

Creates an instance os a ReactiveRangeSlider.

Can optionally provide a formControl to bind this widget to a control.

Can optionally provide a formControlName to bind this ReactiveFormField to a FormControl.

Must provide one of the arguments formControl or a formControlName, but not both at the same time.

Implementation

ReactiveRangeSlider({
  super.key,
  super.formControlName,
  super.formControl,
  super.validationMessages,
  super.valueAccessor,
  super.showErrors,

  ////////////////////////////////////////////////////////////////////////////
  InputDecoration? decoration,
  ReactiveRangeSliderLabelBuilder? labelBuilder,
  ValueChanged<RangeValues>? onChanged,
  ValueChanged<RangeValues>? onChangeStart,
  ValueChanged<RangeValues>? onChangeEnd,
  double min = 0.0,
  double max = 1.0,
  int? divisions,
  RangeLabels? labels,
  Color? activeColor,
  Color? inactiveColor,
  SemanticFormatterCallback? semanticFormatterCallback,
  MaterialStateProperty<MouseCursor?>? mouseCursor,
  MaterialStateProperty<Color?>? overlayColor,
}) : super(
        builder: (field) {
          final InputDecoration effectiveDecoration = (decoration ??
                  const InputDecoration())
              .applyDefaults(Theme.of(field.context).inputDecorationTheme);

          var values = field.value;
          if (values == null) {
            values = RangeValues(min, max);
          } else if (values.start < min && values.end > max) {
            values = RangeValues(min, max);
          } else if (values.start < min) {
            values = RangeValues(min, values.end);
          } else if (values.end > max) {
            values = RangeValues(values.start, max);
          }

          return Listener(
            onPointerDown: (_) {
              if (field.control.enabled) {
                field.control.markAsTouched();
              }
            },
            child: InputDecorator(
              decoration: effectiveDecoration.copyWith(
                errorText: field.errorText,
                enabled: field.control.enabled,
              ),
              child: RangeSlider(
                values: values,
                onChanged: field.control.enabled ? field.didChange : null,
                min: min,
                max: max,
                divisions: divisions,
                labels: labelBuilder != null ? labelBuilder(values) : labels,
                activeColor: activeColor,
                inactiveColor: inactiveColor,
                semanticFormatterCallback: semanticFormatterCallback,
                onChangeEnd: onChangeEnd,
                onChangeStart: onChangeStart,
                overlayColor: overlayColor,
                mouseCursor: mouseCursor,
              ),
            ),
          );
        },
      );