FormeRangeSlider constructor

FormeRangeSlider({
  1. RangeValues? initialValue,
  2. required String name,
  3. bool readOnly = false,
  4. required double min,
  5. required double max,
  6. Key? key,
  7. InputDecoration? decoration,
  8. FormeFieldDecorator<RangeValues>? decorator,
  9. int? order,
  10. bool quietlyValidate = false,
  11. SemanticFormatterCallback? semanticFormatterCallback,
  12. ValueChanged<RangeValues>? onChangeStart,
  13. ValueChanged<RangeValues>? onChangeEnd,
  14. ValueChanged<RangeValues>? onChanged,
  15. int? divisions,
  16. Color? activeColor,
  17. Color? inactiveColor,
  18. SliderThemeData? sliderThemeData,
  19. FormRangeLabelRender? rangeLabelRender,
  20. Duration? asyncValidatorDebounce,
  21. AutovalidateMode? autovalidateMode,
  22. FormeFieldStatusChanged<RangeValues?>? onStatusChanged,
  23. dynamic onInitialed,
  24. FormeFieldSetter<RangeValues>? onSaved,
  25. FormeValidator<RangeValues>? validator,
  26. FormeAsyncValidator<RangeValues>? asyncValidator,
  27. bool registrable = true,
  28. bool enabled = true,
  29. dynamic valueUpdater,
  30. FormeFieldValidationFilter<RangeValues>? validationFilter,
  31. FocusNode? focusNode,
})

Implementation

FormeRangeSlider({
  RangeValues? initialValue,
  required String name,
  bool readOnly = false,
  required this.min,
  required this.max,
  Key? key,
  InputDecoration? decoration,
  FormeFieldDecorator<RangeValues>? decorator,
  int? order,
  bool quietlyValidate = false,
  SemanticFormatterCallback? semanticFormatterCallback,
  ValueChanged<RangeValues>? onChangeStart,
  ValueChanged<RangeValues>? onChangeEnd,
  ValueChanged<RangeValues>? onChanged,
  int? divisions,
  Color? activeColor,
  Color? inactiveColor,
  SliderThemeData? sliderThemeData,
  FormRangeLabelRender? rangeLabelRender,
  Duration? asyncValidatorDebounce,
  AutovalidateMode? autovalidateMode,
  FormeFieldStatusChanged<RangeValues?>? onStatusChanged,
  FormeFieldInitialed<RangeValues>? onInitialed,
  FormeFieldSetter<RangeValues>? onSaved,
  FormeValidator<RangeValues>? validator,
  FormeAsyncValidator<RangeValues>? asyncValidator,
  bool registrable = true,
  bool enabled = true,
  FormeFieldValueUpdater<RangeValues>? valueUpdater,
  FormeFieldValidationFilter<RangeValues>? validationFilter,
  FocusNode? focusNode,
}) : super(
          focusNode: focusNode,
          validationFilter: validationFilter,
          valueUpdater: valueUpdater,
          enabled: enabled,
          registrable: registrable,
          quietlyValidate: quietlyValidate,
          asyncValidatorDebounce: asyncValidatorDebounce,
          autovalidateMode: autovalidateMode,
          onStatusChanged: onStatusChanged,
          onInitialed: onInitialed,
          onSaved: onSaved,
          validator: validator,
          asyncValidator: asyncValidator,
          order: order,
          decorator: decorator ??
              (decoration == null
                  ? null
                  : FormeInputDecoratorBuilder(decoration: decoration)),
          key: key,
          readOnly: readOnly,
          name: name,
          initialValue: initialValue ?? RangeValues(min, max),
          builder: (baseState) {
            final _FormeRangeSliderState state =
                baseState as _FormeRangeSliderState;
            final bool readOnly = state.readOnly;

            final Widget slider = ValueListenableBuilder(
                valueListenable: state.notifier,
                builder: (context, _value, _child) {
                  RangeLabels? sliderLabels;

                  if (rangeLabelRender != null) {
                    final String start =
                        rangeLabelRender.startRender(state.value.start);
                    final String end =
                        rangeLabelRender.endRender(state.value.end);
                    sliderLabels = RangeLabels(start, end);
                  }

                  SliderThemeData _sliderThemeData =
                      sliderThemeData ?? SliderTheme.of(state.context);
                  if (_sliderThemeData.thumbShape == null) {
                    _sliderThemeData = _sliderThemeData.copyWith(
                        rangeThumbShape:
                            CustomRangeSliderThumbCircle(value: state.value));
                  }
                  return SliderTheme(
                    data: _sliderThemeData,
                    child: RangeSlider(
                      values: state.value,
                      min: min,
                      max: max,
                      divisions: divisions ?? (max - min).floor(),
                      labels: sliderLabels,
                      activeColor: activeColor,
                      inactiveColor: inactiveColor,
                      onChangeStart: (v) {
                        state.focusNode.requestFocus();
                        onChangeStart?.call(v);
                      },
                      onChangeEnd: (v) {
                        state.didChange(v);
                        onChangeEnd?.call(v);
                      },
                      semanticFormatterCallback: semanticFormatterCallback,
                      onChanged: readOnly
                          ? null
                          : (RangeValues values) {
                              state.updateValue(values);
                              onChanged?.call(values);
                            },
                    ),
                  );
                });

            return Focus(
              focusNode: state.focusNode,
              child: slider,
            );
          });