SubfocusScope#
내부 Subfocus 항목들 사이의 방향키 포커스 이동을 관리하는 스코프(인프라)입니다. orientation
이 traversal 축(↑↓ vs ←→)을 결정하고, 각 Subfocus(focusId:) 항목이 스코프에 자신을 등록합니다. 메뉴·리스트·툴바 같은 컴포넌트의 키보드 내비게이션 기반입니다.
Live Preview#
Web
항목 A (↑↓ 키로 이동)
항목 B
항목 C
Flutter
Loading Flutter...
class SubfocusScopeDefaultExample extends StatelessComponent {
const SubfocusScopeDefaultExample({super.key});
@override
Component build(BuildContext context) {
return SubfocusScope(
child: div(
classes: 'flex flex-col gap-${CoreSpace.scale.space8}',
[
Subfocus(
focusId: 'a',
child: Card(child: Text('항목 A (↑↓ 키로 이동)').bodyMedium),
),
Subfocus(focusId: 'b', child: Card(child: Text('항목 B').bodyMedium)),
Subfocus(focusId: 'c', child: Card(child: Text('항목 C').bodyMedium)),
],
),
);
}
}
class SubfocusScopeDefaultExample extends StatelessWidget {
const SubfocusScopeDefaultExample({super.key});
@override
Widget build(BuildContext context) {
return SubfocusScope(
child: Column(
mainAxisSize: MainAxisSize.min,
spacing: CoreSpace.space8,
children: [
Subfocus(
focusId: 'a',
child: Card(child: Text('항목 A (↑↓ 키로 이동)').bodyMedium),
),
Subfocus(
focusId: 'b',
child: Card(child: Text('항목 B').bodyMedium),
),
Subfocus(
focusId: 'c',
child: Card(child: Text('항목 C').bodyMedium),
),
],
),
);
}
}
사용법#
SubfocusScope(
child: Column(
children: [
Subfocus(focusId: 'a', child: Card(child: Text('항목 A').bodyMedium)),
Subfocus(focusId: 'b', child: Card(child: Text('항목 B').bodyMedium)),
Subfocus(focusId: 'c', child: Card(child: Text('항목 C').bodyMedium)),
],
),
)
Props#
SubfocusScope#
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
child |
Widget / Component |
required | 스코프 내용 (Subfocus 항목 포함) |
autofocus |
bool |
false |
마운트 시 첫 항목 자동 포커스 |
orientation |
CoreSubfocusOrientation |
vertical |
traversal 축 (vertical ↑↓ / horizontal ←→) |
Subfocus (항목)#
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
child |
Widget / Component |
required | 포커스 가능한 항목 콘텐츠 |
focusId | String | required | 스코프 내 고유 식별자 |
enabled |
bool |
true |
traversal 참여 여부 |
subfocusStyle |
CoreSubfocusStyle? |
null |
항목 chrome 단일 진입점 |