Skip to content

Commit 47acd8b

Browse files
Merge pull request #1141 from nrallakis/main
Add widget tests for FormBuilderRangeSlider #1090
2 parents 57cc1c8 + 663e39d commit 47acd8b

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

lib/src/fields/form_builder_range_slider.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ class FormBuilderRangeSlider extends FormBuilderField<RangeValues> {
136136
}) : super(builder: (FormFieldState<RangeValues?> field) {
137137
final state = field as _FormBuilderRangeSliderState;
138138
final effectiveNumberFormat = numberFormat ?? NumberFormat.compact();
139-
139+
if (initialValue == null) {
140+
field.setValue(RangeValues(min, min));
141+
}
140142
return InputDecorator(
141143
decoration: state.decoration,
142144
child: Container(
@@ -145,7 +147,7 @@ class FormBuilderRangeSlider extends FormBuilderField<RangeValues> {
145147
crossAxisAlignment: CrossAxisAlignment.start,
146148
children: [
147149
RangeSlider(
148-
values: field.value ?? RangeValues(min, min),
150+
values: field.value!,
149151
min: min,
150152
max: max,
151153
divisions: divisions,
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_form_builder/flutter_form_builder.dart';
3+
import 'package:flutter_test/flutter_test.dart';
4+
5+
import 'form_builder_tester.dart';
6+
7+
void main() {
8+
group('FormBuilderRangeSlider --', () {
9+
testWidgets('basic', (WidgetTester tester) async {
10+
const widgetName = 'formBuilderRangeSlider';
11+
final testWidget = FormBuilderRangeSlider(
12+
name: widgetName,
13+
min: 10.0,
14+
max: 20.0,
15+
);
16+
await tester.pumpWidget(buildTestableFieldWidget(testWidget));
17+
18+
expect(formSave(), isTrue);
19+
expect(formValue<RangeValues?>(widgetName),
20+
equals(const RangeValues(10.0, 10.0)));
21+
22+
// Inspired by https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/range_slider_test.dart
23+
// Tap at the center of the slider.
24+
final Offset topLeft =
25+
tester.getTopLeft(find.byType(RangeSlider)).translate(24, 0);
26+
final Offset bottomRight =
27+
tester.getBottomRight(find.byType(RangeSlider)).translate(-24, 0);
28+
final Offset rightTarget = topLeft + (bottomRight - topLeft) * 0.5;
29+
await tester.tapAt(rightTarget);
30+
31+
expect(formSave(), isTrue);
32+
expect(formValue<RangeValues>(widgetName), const RangeValues(10.0, 15.0));
33+
});
34+
35+
testWidgets('initial value', (WidgetTester tester) async {
36+
const widgetName = 'formBuilderRangeSlider';
37+
final testWidget = FormBuilderRangeSlider(
38+
name: widgetName,
39+
min: 10.0,
40+
max: 20.0,
41+
initialValue: const RangeValues(14.0, 18.0),
42+
);
43+
await tester.pumpWidget(buildTestableFieldWidget(testWidget));
44+
45+
expect(formSave(), isTrue);
46+
expect(formValue<RangeValues?>(widgetName),
47+
equals(const RangeValues(14.0, 18.0)));
48+
49+
// Inspired by https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/range_slider_test.dart
50+
// Tap a small offset after the start of the slider.
51+
final Offset topLeft =
52+
tester.getTopLeft(find.byType(RangeSlider)).translate(24, 0);
53+
final Offset bottomRight =
54+
tester.getBottomRight(find.byType(RangeSlider)).translate(-24, 0);
55+
final Offset leftTarget = topLeft + (bottomRight - topLeft) * 0.1;
56+
await tester.tapAt(leftTarget);
57+
58+
expect(formSave(), isTrue);
59+
expect(formValue<RangeValues>(widgetName), const RangeValues(11.0, 18.0));
60+
});
61+
});
62+
}

0 commit comments

Comments
 (0)