Tinyrack

Tree Nav

트리 키보드 시맨틱으로 펼칠 수 있는 그룹과 타입이 있는 목적지를 탐색해요.

선택된 목적지와 중첩 rail을 표시하는 타입 기반 확장 탐색을 구성해요.

핵심 속성

속성설명
선택 상태로컬 선택에는 defaultValue를 사용하고, 부모가 선택을 관리하려면 value, onValueChange와 함께 TRTreeNav.controlled를 사용해요.
확장 상태initiallyExpanded는 그룹의 초기 상태를 정하고, TRTreeNavController는 현재 펼친 집합을 읽거나 바꿔요.
중첩과 rail중첩 단계마다 guide rail과 들여쓰기가 추가되고, 선택한 leaf를 포함한 그룹은 활성 강조를 사용해요.
상태 유지pageStorageId는 가장 가까운 PageStorage에서 펼친 그룹을 복원하며 선택 상태의 관리 방식은 바꾸지 않아요.
콘텐츠description은 옅은 보조 줄을 추가해요. leadingtrailing은 전체 행 주위에서 정렬을 유지해요. 그룹의 trailing은 chevron을 대체하고, leaf는 trailing 콘텐츠 뒤에 disclosure indicator를 선택적으로 표시할 수 있어요.
크기uiSize를 생략하면 TRUiDensityScope를 따라요. 모든 크기는 콘텐츠 위아래에 8 logical px를 사용해요. standard density는 한 줄 leaf의 최소 높이 40px를 유지하고, description이 있으면 콘텐츠에 맞춰 행이 커져요.

순서가 있는 컬렉션에는 TRTreeNav를 사용하고, 단독 목적지에는 TRNavigationRow를 사용해요. Tab은 읽기 순서를 따라요. Enter와 Space는 포커스된 행을 실행하고, 위·아래 화살표는 트리 행 사이를 이동하며, 펼침·접힘 화살표는 텍스트 방향을 따라요. 활성 행은 포인터에 hover와 pressed 표면으로 반응해요. 비활성 행은 건너뛰고 포인터와 키보드 입력을 무시해요.

설치

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

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

  @override
  State<DocsTree> createState() => _DocsTreeState();
}

class _DocsTreeState extends State<DocsTree> {
  String? currentPage = 'theming';

  @override
  Widget build(BuildContext context) => TRTreeNav<String>.controlled(
    value: currentPage,
    onValueChange: (value) => setState(() => currentPage = value),
    pageStorageId: 'docs-navigation',
    semanticLabel: 'Documentation',
    items: const [
      TRTreeNavGroup(
        value: 'guides',
        label: Text('GUIDES'),
        description: Text('Product documentation'),
        initiallyExpanded: true,
        children: [
          TRTreeNavLeaf(
            value: 'install',
            label: Text('Install'),
            description: Text('Add and configure the package'),
          ),
          TRTreeNavGroup(
            value: 'advanced',
            label: Text('ADVANCED'),
            initiallyExpanded: true,
            children: [
              TRTreeNavLeaf(value: 'plugins', label: Text('Plugins')),
              TRTreeNavLeaf(value: 'theming', label: Text('Theming')),
            ],
          ),
        ],
      ),
    ],
  );
}

예시

제어형 문서 탐색 고유 링크

컬렉션 밖에는 단독 행을 사용하고, route가 바뀌어도 PageStorage에 중첩 트리의 펼침 상태를 유지해요.

API

TRNavigationRow 속성

Prop타입 / 기본값용도
label, descriptionWidget, Widget? · label required기본 label과 선택적인 옅은 보조 줄을 렌더링해요.
leading, trailingWidget?, Widget? · nulllabel 앞뒤에 콘텐츠를 추가해요. 자동 disclosure indicator는 trailing 콘텐츠 뒤에 표시돼요.
selected, enabledbool, bool · false, true선택 강조와 행을 실행할 수 있는지 제어해요.
onPressedVoidCallback? · null목적지를 실행해요. callback이 없는 행은 실행할 수 없으며 indicator를 표시하지 않아요.
uiSizeTRUiSize? · density defaultTRUiDensityScope가 제공하는 행과 콘텐츠 크기를 덮어써요.

TRTreeNav 속성

Prop타입 / 기본값용도
itemsList<TRTreeNavItem<T>> · required순서가 있는 그룹과 목적지를 정의해요.
value, defaultValueT?, T? · null선택을 제어하거나 비제어 선택의 초기값을 정해요.
onValueChangeValueChanged<T?>? · null활성화된 leaf를 실행하면 값을 전달해요.
controllerTRTreeNavController<T>? · null선택을 관찰하고 펼친 그룹 집합을 관리해요.
pageStorageId, semanticLabelObject?, String? · null펼침 상태를 유지하고 보조 기술에 탐색 영역 이름을 제공해요.
uiSizeTRUiSize? · density defaultTRUiDensityScope가 제공하는 행과 콘텐츠 크기를 덮어써요.

TRTreeNavGroup 속성

Prop타입 / 기본값용도
value, label, childrenT, Widget, List<TRTreeNavItem<T>> · required그룹을 식별하고 trigger와 중첩 node를 정의해요.
initiallyExpandedbool · false그룹을 초기 펼침 집합에 추가해요.
keyKey? · null상태 복원과 정확한 상호작용을 위해 렌더링된 그룹 행을 식별해요.
descriptionWidget? · null그룹 label 아래에 옅은 보조 줄을 추가해요.
disabled, leading, trailingbool?, Widget?, Widget? · null확장을 막거나 행을 꾸며요. trailing은 chevron을 대체해요.

TRTreeNavLeaf 속성

Prop타입 / 기본값용도
value, labelT, Widget · required선택할 수 있는 목적지를 식별하고 렌더링해요.
descriptionWidget? · null목적지 label 아래에 옅은 보조 줄을 추가해요.
keyKey? · nulllabel이 반복되어도 렌더링된 목적지 행을 식별해요.
disabled, leading, trailingbool?, Widget?, Widget? · null선택을 막거나 label 앞뒤에 콘텐츠를 추가해요.
showDisclosureIndicatorbool · false활성 목적지의 trailing 콘텐츠 뒤에 텍스트 방향을 따르는 indicator를 표시해요.

TRTreeNavController API

Prop타입 / 기본값용도
value, expandedT?, Set<T>현재 선택과 수정할 수 없는 펼침 집합을 읽어요.
select, togglevoid Function(T?), void Function(T)선택을 바꾸거나 한 그룹의 펼침 상태를 반전해요.
setExpanded, replaceExpandedmethods그룹 하나를 설정하거나 전체 펼침 집합을 교체해요.