FormeRangeSlider constructor
FormeRangeSlider({
- Key? key,
- String? name,
- RangeValues? initialValue,
- FormeAsyncValidator<
RangeValues> ? asyncValidator, - Duration? asyncValidatorDebounce,
- AutovalidateMode? autovalidateMode,
- bool enabled = true,
- FocusNode? focusNode,
- FormeFieldInitialized<
RangeValues> ? onInitialized, - FormeFieldSetter<
RangeValues> ? onSaved, - FormeFieldStatusChanged<
RangeValues> ? onStatusChanged, - int? order,
- bool quietlyValidate = false,
- bool readOnly = false,
- bool requestFocusOnUserInteraction = true,
- FormeFieldValidationFilter<
RangeValues> ? validationFilter, - FormeValidator<
RangeValues> ? validator, - FormeFieldDecorator<
RangeValues> ? decorator, - required double min,
- required double max,
- Color? activeColor,
- InputDecoration? decoration,
- int? divisions,
- Color? inactiveColor,
- ValueChanged<
RangeValues> ? onChangeEnd, - ValueChanged<
RangeValues> ? onChangeStart, - ValueChanged<
RangeValues> ? onChanged, - FormRangeLabelRender? rangeLabelRender,
- SemanticFormatterCallback? semanticFormatterCallback,
- SliderThemeData? sliderThemeData,
- RangeSliderThumbShapeBuilder? shapeBuilder,
Implementation
FormeRangeSlider({
super.key,
super.name,
RangeValues? initialValue,
super.asyncValidator,
super.asyncValidatorDebounce,
super.autovalidateMode,
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,
FormeFieldDecorator<RangeValues>? decorator,
required this.min,
required this.max,
this.activeColor,
this.decoration,
this.divisions,
this.inactiveColor,
this.onChangeEnd,
this.onChangeStart,
this.onChanged,
this.rangeLabelRender,
this.semanticFormatterCallback,
this.sliderThemeData,
this.shapeBuilder,
}) : super.allFields(
decorator: decorator ??
(decoration == null
? null
: FormeInputDecorationDecorator(
decorationBuilder: (context) => decoration)),
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, _, __) {
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 themeData =
sliderThemeData ?? SliderTheme.of(state.context);
if (themeData.thumbShape == null) {
themeData = themeData.copyWith(
rangeThumbShape: shapeBuilder?.call(
state.context, state.value) ??
CustomRangeSliderThumbCircle(value: state.value));
}
return SliderTheme(
data: themeData,
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,
);
});