FormBuilderRangeSlider constructor

FormBuilderRangeSlider({
  1. Key? key,
  2. required String name,
  3. FormFieldValidator<RangeValues>? validator,
  4. RangeValues? initialValue,
  5. InputDecoration decoration = const InputDecoration(),
  6. ValueChanged<RangeValues?>? onChanged,
  7. ValueTransformer<RangeValues?>? valueTransformer,
  8. bool enabled = true,
  9. FormFieldSetter<RangeValues>? onSaved,
  10. AutovalidateMode? autovalidateMode = AutovalidateMode.disabled,
  11. VoidCallback? onReset,
  12. FocusNode? focusNode,
  13. required double min,
  14. required double max,
  15. int? divisions,
  16. Color? activeColor,
  17. Color? inactiveColor,
  18. ValueChanged<RangeValues>? onChangeStart,
  19. ValueChanged<RangeValues>? onChangeEnd,
  20. RangeLabels? labels,
  21. SemanticFormatterCallback? semanticFormatterCallback,
  22. DisplayValues displayValues = DisplayValues.all,
  23. TextStyle? minTextStyle,
  24. TextStyle? textStyle,
  25. TextStyle? maxTextStyle,
  26. NumberFormat? numberFormat,
  27. bool shouldRequestFocus = false,
})

Creates field to select a range of values on a Slider

Implementation

FormBuilderRangeSlider({
  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.min,
  required this.max,
  this.divisions,
  this.activeColor,
  this.inactiveColor,
  this.onChangeStart,
  this.onChangeEnd,
  this.labels,
  this.semanticFormatterCallback,
  this.displayValues = DisplayValues.all,
  this.minTextStyle,
  this.textStyle,
  this.maxTextStyle,
  this.numberFormat,
  this.shouldRequestFocus = false,
}) : super(builder: (FormFieldState<RangeValues?> field) {
        final state = field as _FormBuilderRangeSliderState;
        final effectiveNumberFormat = numberFormat ?? NumberFormat.compact();
        if (initialValue == null) {
          field.setValue(RangeValues(min, min));
        }
        return InputDecorator(
          decoration: state.decoration,
          child: Container(
            padding: const EdgeInsets.only(top: 10.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                RangeSlider(
                  values: field.value!,
                  min: min,
                  max: max,
                  divisions: divisions,
                  activeColor: activeColor,
                  inactiveColor: inactiveColor,
                  onChangeEnd: onChangeEnd,
                  onChangeStart: onChangeStart,
                  labels: labels,
                  semanticFormatterCallback: semanticFormatterCallback,
                  onChanged: state.enabled
                      ? (values) {
                          if (shouldRequestFocus) {
                            state.requestFocus();
                          }
                          field.didChange(values);
                        }
                      : null,
                ),
                Row(
                  children: <Widget>[
                    if (displayValues != DisplayValues.none &&
                        displayValues != DisplayValues.current)
                      Text(
                        effectiveNumberFormat.format(min),
                        style: minTextStyle ?? textStyle,
                      ),
                    const Spacer(),
                    if (displayValues != DisplayValues.none &&
                        displayValues != DisplayValues.minMax)
                      Text(
                        '${effectiveNumberFormat.format(field.value!.start)} - ${effectiveNumberFormat.format(field.value!.end)}',
                        style: textStyle,
                      ),
                    const Spacer(),
                    if (displayValues != DisplayValues.none &&
                        displayValues != DisplayValues.current)
                      Text(
                        effectiveNumberFormat.format(max),
                        style: maxTextStyle ?? textStyle,
                      ),
                  ],
                ),
              ],
            ),
          ),
        );
      });