Radio Group
라디오 사이의 상호 배타적 선택을 관리해요.
라디오 사이의 상호 배타적 선택을 관리해요.
핵심 속성
| 속성 | 설명 |
|---|---|
| 상태 관리 | 그룹이 선택을 관리하면 defaultValue를, controlled 상태에는 value와 onValueChange를 함께 사용해요. 둘 다 String?이고 모두 null이면 처음에는 아무것도 선택되지 않아요. |
| 레이블 | 그룹은 자체 레이블을 그리지 않아요. TRField로 감싸서 선택 항목의 이름을 붙이고 아래에 오류 메시지를 보여 주세요. |
| 사용 가능 여부 | 그룹 disabled는 모든 옵션을 막고, 이름 있는 그룹을 TRFormValues에서 제외해요. 그룹 readOnly는 선택 값과 포커스를 유지하면서 변경만 막아요. |
| 폼 | name을 지정하면 선택된 문자열을 가장 가까운 TRForm에 등록하고 save()가 그 값을 알려줘요. 그룹은 FormField가 아니라서 TRForm.reset()이 값을 되돌리지 않아요. 처음 값은 직접 상태에서 복원하세요. |
| 키보드 | Tab으로 그룹에 한 번 들어가면 선택된 옵션에 포커스가 놓여요. 이후에는 양쪽 축의 화살표 키와 Home, End가 포커스와 선택을 함께 옮기고, 비활성 옵션을 건너뛰며, 양 끝에서 순환해요. readOnly 그룹은 값을 바꾸지 않고 포커스만 옮겨요. |
그룹이 선택 값을 들고 있고 자식은 공개 위젯인 TRRadio이므로, 각 옵션에는 고유한 value가 필요해요. 웹 컴포넌트와 달리 required 속성, 바깥 폼 연결, 내장 검증이 없어요. TRField로 감싸 보이는 레이블을 붙이고, 오류 메시지는 직접 상태에서 계산하세요.
설치
패키지를 추가한 뒤 공개 라이브러리를 가져오세요.
flutter pub add tinyrack_uiimport 'package:tinyrack_ui/tinyrack_ui.dart';플레이그라운드
사용법
import 'package:material_ui/material_ui.dart';
import 'package:tinyrack_ui/tinyrack_ui.dart';
class DeploymentRack extends StatefulWidget {
const DeploymentRack({super.key});
@override
State<DeploymentRack> createState() => _DeploymentRackState();
}
class _DeploymentRackState extends State<DeploymentRack> {
String rack = 'alpha';
@override
Widget build(BuildContext context) {
return TRField(
label: '배포 랙',
control: TRRadioGroup(
name: 'rack',
value: rack,
onValueChange: (next) => setState(() => rack = next),
children: const [
TRRadio(
value: 'alpha',
label: TRText('알파 랙', variant: TRTextVariant.bodySm),
),
TRRadio(
value: 'beta',
label: TRText('베타 랙', variant: TRTextVariant.bodySm),
),
],
),
);
}
}예시
편집 가능, 읽기 전용, 비활성 그룹 고유 링크
읽기 전용 그룹은 값과 키보드 포커스를 유지하고, 비활성 그룹은 둘 다 막으면서 TRFormValues에서도 빠져요.
값 하나를 필수로 받기 고유 링크
그룹에는 required 속성이 없으니 값을 직접 제어하고 메시지를 TRField.errorText로 넘기세요.
폼에서 값 모으기 고유 링크
name을 지정하면 선택된 문자열이 가장 가까운 TRForm에 등록되고 save()로 가져올 수 있어요.
API
TRRadioGroup 속성
| Prop | 타입 / 기본값 | 용도 |
|---|---|---|
children | List<TRRadio> · required | 옵션을 화면 순서이자 포커스 순서로 나열해요. 타입이 TRRadio라 그룹이 각 옵션의 value와 disabled를 읽을 수 있어요. |
value | String? · null | 선택된 옵션을 제어해요. 값이 있으면 그룹이 스스로 선택을 바꾸지 않아요. |
defaultValue | String? · null | 제어하지 않는 그룹의 처음 선택을 정해요. 한 번만 읽으므로 나중에 바꿔도 선택이 옮겨지지 않고, value를 넘기면 쓰이지 않아요. |
onValueChange | ValueChanged<String>? · null | 탭이나 화살표 키 뒤의 다음 선택 값을 알려줘요. 변경을 취소할 수단은 없어요. |
disabled | bool · false | 모든 옵션을 비활성화하고 이름 있는 그룹을 TRFormValues에서 제외해요. |
readOnly | bool · false | 선택 값과 키보드 포커스를 유지하면서 모든 변경을 막아요. |
name | String? · null | 선택 값을 가장 가까운 TRForm에 등록해요. |