Range#
두 개의 핸들로 [minValue, maxValue] 구간을 선택하는 듀얼 핸들 슬라이더입니다. 단일 값을 선택하는 Slider와 달리, 가격대·날짜 범위·필터 구간 같은
범위 선택에 사용합니다.
Live Preview#
Web
Flutter
Loading Flutter...
class RangeDefaultExample extends StatefulComponent {
const RangeDefaultExample({super.key});
@override
State<RangeDefaultExample> createState() => _RangeDefaultExampleState();
}
class _RangeDefaultExampleState extends State<RangeDefaultExample> {
double _min = 20;
double _max = 80;
@override
Component build(BuildContext context) {
return Range(
minValue: _min,
maxValue: _max,
onChanged: (min, max) => setState(() {
_min = min;
_max = max;
}),
);
}
}
class RangeDefaultExample extends StatefulWidget {
const RangeDefaultExample({super.key});
@override
State<RangeDefaultExample> createState() => _RangeDefaultExampleState();
}
class _RangeDefaultExampleState extends State<RangeDefaultExample> {
double _min = 20;
double _max = 80;
@override
Widget build(BuildContext context) {
return Range(
minValue: _min,
maxValue: _max,
onChanged: (min, max) => setState(() {
_min = min;
_max = max;
}),
);
}
}
사용 시기 (When to Use)#
이 컴포넌트를 사용하세요:
- 최소/최대 두 값으로 구간을 선택받는 경우 (가격대 필터 등)
- 핸들 사이 구간을 시각적으로 강조해야 하는 경우
대신 다른 컴포넌트를 사용하세요:
Slider: 단일 값을 선택하는 경우
기본 사용법 (Basic Usage)#
// 기본 범위 슬라이더
Range(
minValue: minVal,
maxValue: maxVal,
onChanged: (min, max) => setState(() {
minVal = min;
maxVal = max;
}),
)
// 구간 / 분할 조정
Range(
minValue: 25,
maxValue: 75,
min: 0,
max: 200,
divisions: 20,
onChanged: (min, max) => updateRange(min, max),
)
// 기본 범위 슬라이더
Range(
minValue: minVal,
maxValue: maxVal,
onChanged: (min, max) => setState(() {
minVal = min;
maxVal = max;
}),
)
// 구간 / 분할 조정
Range(
minValue: 25,
maxValue: 75,
min: 0,
max: 200,
divisions: 20,
onChanged: (min, max) => updateRange(min, max),
)
Props / Parameters#
| 속성 | 타입 | 기본값 | 설명 |
|---|---|---|---|
minValue |
double |
0.0 |
하단(최소) 핸들의 현재 값 |
maxValue |
double |
100.0 |
상단(최대) 핸들의 현재 값 |
min | double | 0.0 | 트랙의 절대 최소값 |
max | double | 100.0 | 트랙의 절대 최대값 |
step | double? | null | 값 증가 단위 |
divisions |
int? |
null |
트랙의 이산 분할 개수 |
enabled | bool | true | 상호작용 가능 여부 |
onChanged |
void Function(double, double)? |
null |
값 변경 콜백 (minValue, maxValue) |
leading |
Widget? / Component? |
null |
슬라이더 앞에 표시할 위젯 |
trailing |
Widget? / Component? |
null |
슬라이더 뒤에 표시할 위젯 |
rangeStyle |
CoreRangeStyle? |
null |
트랙 색상 / 두께 / 핸들 / 간격 오버라이드 |
동작 스펙 (Behavior)#
인터랙션#
- 드래그: 드래그 시작 지점에서 가까운 핸들이 선택되어 이동
- 탭: 탭한 위치에서 가까운 핸들이 그 지점으로 이동
- 핸들끼리 교차하지 않도록
minValue ≤ maxValue가 항상 유지됨 enabled가false이거나onChanged가null이면 비활성
접근성 (Accessibility)#
-
트랙:
role="slider"+aria-valuemin/aria-valuemax/aria-valuenow - 비활성 시
aria-disabled="true"
크로스 플랫폼 차이점 (Platform Differences)#
| 항목 | Flutter | Web |
|---|---|---|
| 클래스명 | Range | Range |
| 드래그 | GestureDetector 수평 드래그 |
mousedown + document drag listener |
| 핸들 렌더링 | <div> 동등 Container |
<div> |
관련 컴포넌트 (Related Components)#
- Slider: 단일 값 선택 슬라이더