Indicator#
Indicator 는 child 위젯/컴포넌트를 감싸고 그 모서리·가장자리에 item 을 띄우는 wrapper 입니다. 아바타 우상단의 온라인 점, 아이콘 우상단의 카운트 배지, 카드 좌상단의 "NEW" 라벨 같은 패턴에 적합합니다.
Live Preview#
default
Web
DW
Flutter
Loading Flutter...
class IndicatorDefaultExample extends StatelessComponent {
const IndicatorDefaultExample({super.key});
@override
Component build(BuildContext context) {
return CoIndicator(
item: CoStatus(
color: CoreStatusColor.success,
size: CoreStatusSize.lg,
),
child: CoAvatar(initials: 'DW'),
);
}
}
class IndicatorDefaultExample extends StatelessWidget {
const IndicatorDefaultExample({super.key});
@override
Widget build(BuildContext context) {
return const CoIndicator(
item: CoStatus(
color: CoreStatusColor.success,
size: CoreStatusSize.lg,
),
child: CoAvatar(initials: 'DW'),
);
}
}
bottom-start
Web
DW
Flutter
Loading Flutter...
class IndicatorBottomStartExample extends StatelessComponent {
const IndicatorBottomStartExample({super.key});
@override
Component build(BuildContext context) {
return CoIndicator(
horizontalPosition: CoreIndicatorHorizontalPosition.start,
verticalPosition: CoreIndicatorVerticalPosition.bottom,
item: CoStatus(
color: CoreStatusColor.warning,
size: CoreStatusSize.lg,
),
child: CoAvatar(initials: 'DW'),
);
}
}
class IndicatorBottomStartExample extends StatelessWidget {
const IndicatorBottomStartExample({super.key});
@override
Widget build(BuildContext context) {
return const CoIndicator(
horizontalPosition: CoreIndicatorHorizontalPosition.start,
verticalPosition: CoreIndicatorVerticalPosition.bottom,
item: CoStatus(
color: CoreStatusColor.warning,
size: CoreStatusSize.lg,
),
child: CoAvatar(initials: 'DW'),
);
}
}
사용 시기 (When to Use)#
이 컴포넌트를 사용하세요:
- 아바타에 온라인 상태 점 (status dot) 을 표시할 때
- 아이콘 위에 알림 카운트 배지를 띄울 때
- 카드/이미지 위에 "NEW" / "HOT" 라벨을 오버레이할 때
대신 다른 컴포넌트를 사용하세요:
Badge: 인라인 배지가 필요할 때 (다른 요소를 감싸지 않음)DotIndicator: 캐러셀 위치 표시 점들이 필요할 때
기본 사용법 (Basic Usage)#
// 기본 — 우상단 (end + top)
CoIndicator(
item: CoBadge(child: Text('99+')),
child: CoAvatar(initials: 'DW'),
)
// 좌하단 (start + bottom) + 4px offset
CoIndicator(
horizontalPosition: CoreIndicatorHorizontalPosition.start,
verticalPosition: CoreIndicatorVerticalPosition.bottom,
offset: 4,
item: CoStatus(),
child: CoIcon(CoLucideIcons.bell),
)
// 기본 — 우상단
CoIndicator(
item: CoBadge(child: Component.text('99+')),
child: CoAvatar(initials: 'DW'),
)
// 좌하단 + 4px offset
CoIndicator(
horizontalPosition: CoreIndicatorHorizontalPosition.start,
verticalPosition: CoreIndicatorVerticalPosition.bottom,
offset: 4,
item: CoStatus(),
child: CoIcon(CoLucideIcons.bell),
)
Props / Parameters#
| 속성 | 타입 | 기본값 | 설명 |
|---|---|---|---|
child |
Widget (Flutter) / Component (Web) |
필수 | 메인 콘텐츠 |
item |
Widget / Component |
필수 | corner 에 띄울 item (badge / status dot 등) |
horizontalPosition |
CoreIndicatorHorizontalPosition |
end |
start / center / end |
verticalPosition |
CoreIndicatorVerticalPosition |
top |
top / middle / bottom |
offset |
double? |
0 |
선택한 가장자리/코너로부터의 픽셀 오프셋 |
변형 (Variants)#
Default#
우상단 (end + top) 에 item 을 배치 — 가장 흔한 알림 배지 패턴.
CoIndicator(
item: CoBadge(child: Text('99+')),
child: CoAvatar(initials: 'DW'),
)
Bottom Start#
좌하단 (start + bottom) — "NEW" 라벨 같은 라벨 배지에 적합.
CoIndicator(
horizontalPosition: CoreIndicatorHorizontalPosition.start,
verticalPosition: CoreIndicatorVerticalPosition.bottom,
item: CoBadge(child: Text('NEW')),
child: CoAvatar(initials: 'DW'),
)
위치 조합 (Position Matrix)#
| start | center | end | |
|---|---|---|---|
| top | 좌상단 | 상단 가운데 | 우상단 (default) |
| middle | 좌측 가운데 | 정중앙 | 우측 가운데 |
| bottom | 좌하단 | 하단 가운데 | 우하단 |
center / middle 일 땐 transform: translate(-50%, -50%) (Web) 또는
Align(Alignment(0, 0)) (Flutter) 으로 anchor 를 자식의 중심에 맞춥니다.
동작 스펙 (Behavior)#
- 표시 전용 wrapper. 인터랙션 없음.
-
Flutter:
Stack(clipBehavior: .none)+Positioned. item 이 child 의 bounding box 를 넘어가도 잘리지 않음. -
Web:
position: relative; overflow: visible컨테이너 +position: absoluteoverlay div. 동일 시맨틱. -
offset은 양수일수록 item 이 child 안쪽으로 들어옴 (CSStop: Npx,right: Npx와 동일).
접근성 (Accessibility)#
-
Indicator자체는 시맨틱 의미가 없음.item자체가 의미를 가져야 함 (예:CoBadge(child: Text('3 unread'))).
크로스 플랫폼 차이점 (Platform Differences)#
| 항목 | Flutter | Web |
|---|---|---|
| 클래스명 | CoIndicator | CoIndicator |
| 기반 | Stack(clipBehavior: .none) + Positioned |
<div>
position: relative
+
<div>
position: absolute
|
| Center / Middle 정렬 | Align(Alignment(h, v)) |
transform: translate(-50%, -50%) |
| Offset 단위 | logical pixels | CSS px (Tailwind 가 아닌 inline) |
관련 컴포넌트 (Related Components)#
-
Badge:
Indicator.item으로 가장 흔히 쓰이는 컴포넌트. -
Avatar:
Indicator.child로 가장 흔히 쓰이는 컴포넌트. - DotIndicator: 캐러셀 위치 점들.