ToggleGroup
값 기준으로 단일 또는 다중 눌림 토글을 관리해요.
값 기준으로 단일 또는 다중 눌림 토글을 관리해요.
핵심 속성
| 속성 | 설명 |
|---|---|
| 선택 | 기본값은 최대 한 개이고, 선택된 항목을 다시 누르면 선택이 비워져요. multiple을 켜면 각 항목을 따로 켜고 끌 수 있어요. |
| 상태 | value를 넘기면 선택을 직접 제어하고, 넘기지 않으면 defaultValue에서 시작해요. 둘 다 List<String>이고 기본값은 비어 있어요. |
| 방향 | orientation은 Flutter의 Axis를 받고 기본값은 Axis.horizontal이에요. 배치 방향과 방향키 축을 함께 정해요. |
| 키보드 | Tab으로 그룹에 한 번 들어간 뒤에는 방향 축의 화살표 키와 Home, End로 항목 사이를 이동해요. loopFocus가 false가 아니면 양 끝에서 포커스가 순환하고, 비활성 항목은 건너뛰어요. |
| 사용 가능 여부 | 그룹의 disabled는 모든 항목을 끄고, 개별 TRToggle만 따로 끌 수도 있어요. |
그룹이 선택을 들고 있고 자식은 공개 위젯인 TRToggle이므로, 각 항목에는 고유하고 변하지 않는 value가 필요해요. 단일 토글과 마찬가지로 그룹도 폼 값을 제출하지 않으니, 선택이 폼과 함께 전송돼야 한다면 TRCheckboxGroup이나 TRRadioGroup을 쓰세요.
설치
패키지를 추가한 뒤 공개 라이브러리를 가져오세요.
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 AlignmentBar extends StatefulWidget {
const AlignmentBar({super.key});
@override
State<AlignmentBar> createState() => _AlignmentBarState();
}
class _AlignmentBarState extends State<AlignmentBar> {
List<String> alignment = const ['start'];
@override
Widget build(BuildContext context) {
return TRToggleGroup(
value: alignment,
onValueChange: (next) => setState(() => alignment = next),
children: const [
TRToggle(value: 'start', child: Text('시작')),
TRToggle(value: 'center', child: Text('가운데')),
TRToggle(value: 'end', child: Text('끝')),
],
);
}
}예시
단일 선택 고유 링크
기본적으로 값은 하나만 선택돼요. 선택된 항목을 다시 누르면 선택이 해제되고, onValueChange가 다음 목록을 전달해요.
다중 선택 고유 링크
multiple을 켜면 각 항목이 서로 독립적으로 켜지고 꺼져서 value에 여러 값을 함께 담을 수 있어요.
세로 포커스와 비활성화 범위 고유 링크
세로 그룹에서는 위아래 방향키로 포커스를 옮겨요. loopFocus: false는 양 끝에서 포커스를 멈추고, disabled는 모든 항목을 끄며, 항목 하나만 따로 끌 수도 있어요.
API
TRToggleGroup 속성
| Prop | 타입 / 기본값 | 용도 |
|---|---|---|
children | List<TRToggle> · required | 항목을 화면 순서이자 포커스 순서로 나열해요. 타입이 TRToggle이라 그룹이 각 항목의 value와 disabled를 읽을 수 있어요. |
value | List<String>? · null | 선택된 값을 제어해요. 값이 있으면 그룹이 스스로 선택을 바꾸지 않아요. |
defaultValue | List<String> · const [] | 제어하지 않는 그룹의 처음 선택을 정해요. value를 넘기면 쓰이지 않아요. |
onValueChange | ValueChanged<List<String>>? · null | 항목이 바뀐 뒤의 다음 목록을 알려줘요. 변경을 취소할 수단은 없어요. |
multiple | bool · false | 값을 최대 하나만 두는 대신 각 항목을 독립적으로 켜고 끌 수 있게 해요. |
orientation | Axis · Axis.horizontal | 이 축을 따라 항목을 배치하고, 포커스를 옮기는 화살표 키를 정해요. |
loopFocus | bool · true | 처음과 마지막 사용 가능 항목에서 방향키 포커스를 순환시켜요. false로 두면 양 끝에서 멈춰요. |
disabled | bool · false | 개별로 비활성인 항목과 더해, 그룹의 모든 항목을 비활성으로 만들어요. |