Tinyrack

ToggleGroup

값 기준으로 단일 또는 다중 눌림 토글을 관리해요.

값 기준으로 단일 또는 다중 눌림 토글을 관리해요.

핵심 속성

속성설명
선택기본값은 최대 한 개이고, 선택된 항목을 다시 누르면 선택이 비워져요. multiple을 켜면 각 항목을 따로 켜고 끌 수 있어요.
상태value를 넘기면 선택을 직접 제어하고, 넘기지 않으면 defaultValue에서 시작해요. 둘 다 List<String>이고 기본값은 비어 있어요.
방향orientation은 Flutter의 Axis를 받고 기본값은 Axis.horizontal이에요. 배치 방향과 방향키 축을 함께 정해요.
키보드Tab으로 그룹에 한 번 들어간 뒤에는 방향 축의 화살표 키와 Home, End로 항목 사이를 이동해요. loopFocusfalse가 아니면 양 끝에서 포커스가 순환하고, 비활성 항목은 건너뛰어요.
사용 가능 여부그룹의 disabled는 모든 항목을 끄고, 개별 TRToggle만 따로 끌 수도 있어요.

그룹이 선택을 들고 있고 자식은 공개 위젯인 TRToggle이므로, 각 항목에는 고유하고 변하지 않는 value가 필요해요. 단일 토글과 마찬가지로 그룹도 폼 값을 제출하지 않으니, 선택이 폼과 함께 전송돼야 한다면 TRCheckboxGroup이나 TRRadioGroup을 쓰세요.

설치

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

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';

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타입 / 기본값용도
childrenList<TRToggle> · required항목을 화면 순서이자 포커스 순서로 나열해요. 타입이 TRToggle이라 그룹이 각 항목의 valuedisabled를 읽을 수 있어요.
valueList<String>? · null선택된 값을 제어해요. 값이 있으면 그룹이 스스로 선택을 바꾸지 않아요.
defaultValueList<String> · const []제어하지 않는 그룹의 처음 선택을 정해요. value를 넘기면 쓰이지 않아요.
onValueChangeValueChanged<List<String>>? · null항목이 바뀐 뒤의 다음 목록을 알려줘요. 변경을 취소할 수단은 없어요.
multiplebool · false값을 최대 하나만 두는 대신 각 항목을 독립적으로 켜고 끌 수 있게 해요.
orientationAxis · Axis.horizontal이 축을 따라 항목을 배치하고, 포커스를 옮기는 화살표 키를 정해요.
loopFocusbool · true처음과 마지막 사용 가능 항목에서 방향키 포커스를 순환시켜요. false로 두면 양 끝에서 멈춰요.
disabledbool · false개별로 비활성인 항목과 더해, 그룹의 모든 항목을 비활성으로 만들어요.