Tinyrack

Toggle

해제할 때까지 눌린 상태를 유지하는 2상태 컨트롤이에요.

해제할 때까지 눌린 상태를 유지하는 2상태 컨트롤이에요.

핵심 속성

속성설명
상태pressed를 넘기면 상태를 직접 제어하고, 넘기지 않으면 falsedefaultPressed에서 시작해 스스로 관리해요. 두 방식 모두 onPressedChange로 다음 값을 알려줘요.
사용 가능 여부disabled는 탭과 키보드 조작을 막고 비활성 불투명도 토큰을 적용해요. 눌린 모습은 그대로 보여요.
레이블child는 필수이고 눈에 보이면서 접근 가능한 이름이 돼요. 어떤 크기에서도 읽히도록 짧게 쓰세요.
크기uiSizemd, lg를 받고 기본값은 md예요. 각 크기는 공통 컨트롤 지표에서 높이와 좌우 여백, 글자 크기를 함께 정해요.
그룹TRToggleGroup 안에서 value가 있는 토글은 눌림 상태를 그룹에서 가져와요. 이때 pressedonPressedChange는 쓰이지 않고, 그룹의 disabled가 항목의 disabled에 더해져요.

토글은 눌린 상태를 유지하는 버튼이지 폼 필드가 아니에요. Semantics(button: true, toggled: pressed)를 노출하고 값을 제출하지 않아요. 네이티브 버튼처럼 Enter는 누를 때, Space는 뗄 때 동작해요. 값이 폼과 함께 전송돼야 한다면 TRCheckboxTRSwitch를 쓰세요.

설치

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

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 FormattingBar extends StatefulWidget {
  const FormattingBar({super.key});

  @override
  State<FormattingBar> createState() => _FormattingBarState();
}

class _FormattingBarState extends State<FormattingBar> {
  bool bold = false;

  @override
  Widget build(BuildContext context) {
    return TRToggle(
      pressed: bold,
      onPressedChange: (next) => setState(() => bold = next),
      child: const Text('굵게'),
    );
  }
}

예시

제어형 서식 토글 고유 링크

pressed로 상태를 직접 들고 onPressedChange에서 갱신하면 토글 상태를 다른 UI에도 반영할 수 있어요.

사용 가능 상태와 사용 불가 상태 고유 링크

pressed를 넘기지 않으면 defaultPressed에서 시작해 스스로 상태를 관리해요. disabled 토글은 눌린 모습은 유지하지만 탭과 키보드 조작, 포커스를 받지 않아요.

크기 고유 링크

uiSize가 높이와 좌우 여백, 글자 크기를 함께 정해요. 토글 옆에 놓인 컨트롤과 크기를 맞추세요.

API

TRToggle 속성

Prop타입 / 기본값용도
childWidget · required레이블을 렌더링해요. 글자 스타일은 uiSize와 테마에서 오므로 TextStyle을 따로 지정하지 않아도 돼요.
pressedbool? · null눌림 상태를 제어해요. 값이 있으면 위젯이 스스로 상태를 바꾸지 않아요.
defaultPressedbool · false제어하지 않는 토글의 처음 상태를 정해요. pressed를 넘기면 쓰이지 않아요.
onPressedChangeValueChanged<bool>? · null탭이나 Enter, Space 이후의 다음 눌림 값을 알려줘요. 변경을 취소할 수단은 없어요.
disabledbool · false포인터와 키보드 조작을 막고 보조 기술에 비활성 상태로 알려요.
uiSizeTRUiSize · TRUiSize.mdmd, lg 중 컨트롤 지표를 선택해요.
valueString? · nullTRToggleGroup 안에서 토글을 식별해요. 그룹 안에서 고유하고 변하지 않는 값을 쓰세요.
focusNodeFocusNode? · null포커스 처리를 넘겨받아요. 넘기지 않으면 토글이 직접 노드를 만들고 정리하거나, 그룹이 관리하는 노드를 빌려 써요.
autofocusbool · false토글이 처음 나타날 때 포커스를 요청해요. 한 화면에서 한 번만 쓰세요.