크로스 플랫폼#
CoUI는 Flutter와 Jaspr Web에서 동일한 컴포넌트 세트를 제공합니다.
아키텍처#
coui_core (공유 계약)
├── coui_flutter (Flutter 구현)
└── coui_web (Jaspr Web 구현)
공유 계약 (coui_core)#
플랫폼 간 공통 인터페이스를 정의합니다:
// 예: CoreButtonContract
abstract class CoreButtonContract {
bool get disabled;
void Function()? get onPressed;
}
API 비교#
생성자 패턴#
// Named parameters, Widget tree
Button(
variant: ButtonVariant.primary,
size: ButtonSize.md,
onPressed: () {},
child: Text('Click'),
)
// Style modifiers, Component tree
Button(
style: [Button.primary, Button.md],
onClick: () {},
child: text('Click'),
)
테마 적용#
// ComponentThemeData + ThemeExtension
ComponentTheme(
data: ComponentThemeData(
button: ButtonTheme(borderRadius: ...),
),
child: widget,
)
// CSS + DaisyUI themes
// data-theme attribute로 전역 테마 전환
컴포넌트 매핑#
전체 140+ 컴포넌트가 양쪽 플랫폼에서 동일하게 제공됩니다:
| 카테고리 | Flutter | Web |
|---|---|---|
| Form (Input, Select, etc.) | 20+ | 20+ |
| Display (Avatar, Badge, etc.) | 25+ | 25+ |
| Navigation (Menu, Tabs, etc.) | 10+ | 10+ |
| Overlay (Dialog, Toast, etc.) | 10+ | 10+ |
| Layout (Accordion, Grid, etc.) | 15+ | 15+ |
| Control (Button, FAB, etc.) | 10+ | 10+ |
| Chart (Tracker) | 1 | 1 |
| Locale (Localizations) | 1 | 1 |
개발 팁#
- API 먼저 설계: coui_core에 계약을 정의하고 양쪽 구현
- 테스트 분리: Flutter widget test + Web unit test 별도 작성
- DCM 통일: 양쪽 패키지에 동일한 DCM 규칙 적용
-
Barrel export: 양쪽
coui_flutter.dart/coui_web.dart동기화 유지