選択中の移動先とネストされたレールを表示する、型付きの展開ナビゲーションを構築します。
主なプロパティ
| 選択状態 | ローカル選択には defaultValue を使い、親で管理する場合は value と onValueChange を指定した TRTreeNav.controlled を使います。 |
| 展開状態 | initiallyExpanded はグループの初期状態を設定し、TRTreeNavController は現在の展開集合を読み書きします。 |
| ネストとレール | ネストの各階層にガイドレールとインデントが加わり、選択中の leaf を含むグループは強調表示されます。 |
| 状態の保持 | pageStorageId は最寄りの PageStorage から展開グループを復元します。選択状態の管理方法は変わりません。 |
| コンテンツ | description は薄い補助行を追加します。leading と trailing は行全体の両側で整列します。グループの trailing は chevron を置き換え、leaf は trailing コンテンツの後ろに disclosure indicator を任意で表示できます。 |
| サイズ | uiSize を省略すると TRUiDensityScope に従います。すべてのサイズでコンテンツの上下に 8 logical px を使います。standard density は 1 行の leaf の最小高 40px を維持し、description がある場合はコンテンツに合わせて行が広がります。 |
順序付きのコレクションには TRTreeNav を使い、単独の移動先には TRNavigationRow を使います。Tab は読み順に従います。Enter と Space はフォーカス中の行を実行し、上下矢印はツリーの行間を移動し、展開・折りたたみの矢印はテキスト方向に従います。有効な行はポインター操作にホバーと押下中のサーフェスで応答します。無効な行はスキップされ、ポインターとキーボード入力を無視します。
インストール
パッケージを追加し、公開ライブラリをインポートしてください。
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')),
],
),
],
),
],
);
}
例
API
TRNavigationRow のプロパティ
label, description | Widget, Widget? · label required | 主ラベルと、任意の薄い補助行を描画します。 |
leading, trailing | Widget?, Widget? · null | ラベルの前後にコンテンツを追加します。自動 disclosure indicator は trailing コンテンツの後ろに表示されます。 |
selected, enabled | bool, bool · false, true | 選択中の強調表示と、行を実行できるかどうかを制御します。 |
onPressed | VoidCallback? · null | 移動先を実行します。callback のない行は実行不可となり、indicator を表示しません。 |
uiSize | TRUiSize? · density default | TRUiDensityScope が提供する行とコンテンツのサイズを上書きします。 |
TRTreeNav のプロパティ
items | List<TRTreeNavItem<T>> · required | 順序付きのグループと移動先を定義します。 |
value, defaultValue | T?, T? · null | 選択を制御するか、非制御選択の初期値を設定します。 |
onValueChange | ValueChanged<T?>? · null | 有効な leaf が実行されたときに値を通知します。 |
controller | TRTreeNavController<T>? · null | 選択を監視し、展開グループの集合を管理します。 |
pageStorageId, semanticLabel | Object?, String? · null | 展開状態を保持し、支援技術向けにナビゲーション領域へ名前を付けます。 |
uiSize | TRUiSize? · density default | TRUiDensityScope が提供する行とコンテンツのサイズを上書きします。 |
TRTreeNavGroup のプロパティ
value, label, children | T, Widget, List<TRTreeNavItem<T>> · required | グループを識別し、trigger とネストされた node を定義します。 |
initiallyExpanded | bool · false | グループを初期展開集合へ追加します。 |
key | Key? · null | 状態の復元と正確な操作のために、描画されたグループ行を識別します。 |
description | Widget? · null | グループの label の下に薄い補助行を追加します。 |
disabled, leading, trailing | bool?, Widget?, Widget? · null | 展開を無効にするか行を装飾します。trailing は chevron を置き換えます。 |
TRTreeNavLeaf のプロパティ
value, label | T, Widget · required | 選択可能な移動先を識別して描画します。 |
description | Widget? · null | 移動先の label の下に薄い補助行を追加します。 |
key | Key? · null | label が重複しても、描画された移動先の行を識別します。 |
disabled, leading, trailing | bool?, Widget?, Widget? · null | 選択を無効にするか、label の前後へコンテンツを追加します。 |
showDisclosureIndicator | bool · false | 有効な移動先の trailing コンテンツの後ろに、文字方向に対応する indicator を表示します。 |
TRTreeNavController API
value, expanded | T?, Set<T> | 現在の選択と変更不可の展開集合を読み取ります。 |
select, toggle | void Function(T?), void Function(T) | 選択を変更するか、1 つのグループの展開状態を反転します。 |
setExpanded, replaceExpanded | methods | 1 つのグループを設定するか、展開集合全体を置き換えます。 |