Tinyrack

Slider

가로 또는 세로 트랙에서 단일 값이나 범위를 선택해요.

가로 또는 세로 트랙에서 단일 값이나 범위를 선택해요.

핵심 속성

속성설명
TRSliderdouble 하나를 다뤄요. 범위는 RangeValues를 다루는 별도 위젯인 TRRangeSlider예요. 두 위젯 모두 defaultValue를 받는 비제어 생성자와 value를 받는 .controlled 생성자가 있어요.
범위min, max, step이 포인터와 키보드 변경을 모두 제한하고 눈금에 맞춰요. TRRangeSliderminGap은 스텝 개수가 아니라 값 단위의 거리이고, 움직이는 쪽 썸이 그 간격을 흡수해요. 두 썸은 서로를 밀거나 교차하지 않고 맞닿는 지점에서 멈춰요.
name이나 숨은 입력 요소는 없어요. Flutter Form 안에 TRSliderFormFieldTRRangeSliderFormField를 두고 validator, onSaved, FormState로 값을 다루세요.
검증검증 규칙은 폼 필드가 가져요. 폼 필드는 메시지를 errorText로 내려보내고, 그 문구가 트랙 아래에 표시되면서 채워진 부분에 오류 색이 입혀져요. 첫 제출 전에 메시지를 보일지는 autovalidateMode로 정하세요. Form 밖에서는 errorText를 직접 넘기세요.
키보드포커스된 트랙은 Right·Up에서 step만큼 올라가고 Left·Down에서 같은 만큼 내려가요. 큰 단위 이동은 없고 Page Up, Page Down, Home, End는 처리하지 않아요. TRRangeSlider에서는 마지막 포인터 입력이 고른 썸을 방향키가 움직이고, 처음에는 아래쪽 썸이에요.
레이블label은 트랙 위에 현재 값을 함께 보여주는 제목 줄을 그리고, labelBuilder는 보이는 텍스트와 시맨틱 값 모두를 포맷해요. 접근성 이름을 보이는 레이블과 다르게 하거나 보이는 레이블이 없을 때는 semanticLabel을 설정하세요.

볼륨이나 트래픽 비중처럼 알려진 범위에서 대략적인 값을 고를 때 TRSlider를 쓰세요. 위치보다 정확한 숫자가 중요하다면 TRTextFieldTRNumberField를 쓰세요.

설치

패키지를 추가한 뒤 공개 라이브러리를 가져오세요.

flutter pub add tinyrack_ui
import 'package:tinyrack_ui/tinyrack_ui.dart';

플레이그라운드

사용법

import 'package:material_ui/material_ui.dart';
import 'package:tinyrack_ui/tinyrack_ui.dart';

TRSlider.controlled(
  label: 'Traffic',
  value: traffic,
  onValueChange: (value) => setState(() => traffic = value),
)

예시

볼륨 고유 링크

비제어 생성자가 값을 소유해요. 슬라이더는 부모가 주는 너비를 채우므로 너비를 제약하세요.

크기 고유 링크

`uiSize`는 트랙 두께는 그대로 두고 썸과 트랙 주변 공간의 크기를 조절해요. 밀도가 높은 컨트롤 영역에 놓을 때는 `TRUiSize.md`을 쓰세요.

방향 고유 링크

세로 슬라이더는 최댓값을 위에 두고 고정 너비를 쓰며 주어진 높이를 채워요. 트랙이 들어갈 자리가 생기도록 높이를 제약하세요.

비활성 슬라이더 고유 링크

값은 계속 보이되 바꿀 수 없어야 한다면 `enabled: false`를 설정하세요. 시맨틱 노드에서 증가·감소 동작이 빠지므로 보조 기술도 더 이상 제공하지 않아요.

두 썸 범위 고유 링크

`TRRangeSlider`는 `RangeValues`를 다루고 두 썸을 값 단위로 `minGap`만큼 떨어뜨려 유지해요. `labelBuilder`는 제목 줄과 시맨틱 값 양쪽에서 각 끝을 포맷하고, 방향키는 마지막 포인터 입력이 고른 썸을 움직여요.

폼 제출 고유 링크

`TRSliderFormField`는 감싸는 `Form`에 참여하므로 `FormState.save`가 `onSaved`로 값을 모아요. 직렬화를 위한 `name`이나 숨은 입력은 없어요.

필드가 담당하는 검증 고유 링크

썸을 60% 아래로 옮기면 오류가 나타나고, 값을 올리면 메시지가 사라져요. `AutovalidateMode.onUserInteraction`은 조작 전까지 조용히 있고, 제출할 때는 `validate`가 `save`를 막아줘요.

API

TRSlider 속성

Prop타입 / 기본값용도
defaultValuedouble · 0비제어 생성자의 시작 값을 정해요. 이후에는 위젯이 값을 소유하고 변경될 때마다 onValueChange로 알려요.
valuedouble? · required on .controlled직접 관리하는 상태로 썸을 움직여요. 위젯이 스스로 값을 바꾸지 않으니 onValueChange 안에서 상태를 갱신하세요.
onValueChangeValueChanged<double>? · null조작이 진행되는 동안 포인터와 키보드 변경마다 호출돼요. 별도의 커밋 콜백은 없으니 드래그 비용이 큰 작업은 직접 디바운스하세요.
min, max, stepdouble · 0, 100, 1범위를 정해요. 값은 경계 안으로 잘리고 가장 가까운 스텝에 맞춰져요. 생성자는 min < maxstep > 0을 단언해요.
labelString? · null트랙 위에 레이블과 현재 값을 보여주는 제목 줄을 더해요. null로 두면 트랙만 남으니 대신 semanticLabel을 주세요.
labelBuilderTRSliderLabelBuilder? · null제목 줄과 시맨틱 값에 쓰일 값을 포맷해요. 단위나 백분율에 사용하세요. 지정하지 않으면 정수는 소수점 없이 표시돼요.
semanticLabelString? · null보조 기술에 컨트롤 이름을 알려줘요. 지정하지 않으면 label을 따르니, 보이는 레이블이 없거나 그것만으로 뜻이 불분명할 때 설정하세요.
errorTextString? · null트랙 아래에 오류 색 메시지를 표시하고 채워진 부분에도 그 색을 입혀요. TRSliderFormField가 검증기에서 이 값을 넘겨주므로, 직접 설정하는 건 Form 밖일 때만 하세요.
uiSizeTRUiSize · TRUiSize.md썸과 트랙 주변에 확보되는 공간의 크기를 조절해요. 트랙 두께는 모든 크기에서 같아요. 밀도가 높은 화면에는 TRUiSize.md을 쓰세요.
verticalbool · false트랙을 세로로 세우고 최댓값을 위쪽에 둬요. 세로 슬라이더는 고정 너비를 쓰고 부모가 주는 높이를 채우니 그 높이를 제약하세요.
enabledbool · true포인터와 키보드 변경을 막고 시맨틱 노드에서 증가·감소 동작을 없애요. 값은 계속 보여요. Flutter는 React 문서의 disabled 대신 enabled를 써요.

TRRangeSlider 속성

Prop타입 / 기본값용도
defaultValueRangeValues · RangeValues(25, 75)비제어 생성자의 시작 쌍을 정해요. .controlled 생성자는 대신 value를 받고 이 값은 필수예요.
minGapdouble · 0두 썸 사이를 값 단위로 최소 이만큼 벌려요. 움직이는 썸이 그 간격에서 멈추고, 나머지 썸은 원래 자리에 남아요.
onValueChangeValueChanged<RangeValues>? · null경계와 최소 간격이 적용된 뒤의 값 쌍 전체를 변경마다 알려요.
labelBuilderTRSliderLabelBuilder? · null양쪽 끝을 각각 포맷해요. 제목 줄은 두 결과를 20%–80%처럼 en 대시로 이어요.

TRSliderFormField와 TRRangeSliderFormField

Prop타입 / 기본값용도
initialValuedouble · 0 / RangeValues · RangeValues(25, 75)필드의 초기값이에요. FormState.reset은 슬라이더를 이 값으로 되돌려요.
validatorFormFieldValidator? · null오류 메시지를 반환해 FormState.validate를 막고, null을 반환하면 값을 받아들여요. 폼 필드는 그 메시지를 errorText로 슬라이더에 전달해요.
autovalidateModeAutovalidateMode? · null검증을 언제 실행할지 정해요. AutovalidateMode.onUserInteraction은 썸을 움직이기 전까지 조용히 있다가, 값이 조건을 만족하면 바로 오류를 지워요.
onSavedFormFieldSetter? · nullFormState.save가 실행될 때 값을 받아요. validate를 통과한 뒤 제출 결과를 모을 때 쓰세요.