| ํญ๋ชฉ | ๋ด์ฉ |
| Invoke | /flutter:ui |
| Aliases | /ui, /21, /coui |
| Category | kobic-development |
| Complexity | moderate |
| MCP Servers | magic, figma, serena |
/flutter:ui โ ํผ๊ทธ๋ง ๋์์ธ์ ํ๋ฉด ์ฝ๋๋ก#
ํ๋ง๋๋ก#
๋์์ด๋๊ฐ ๊ทธ๋ฆฐ ํผ๊ทธ๋ง ๋์์ธ์ ๋ณด๊ณ , ๊ทธ๋๋ก ์๋ํ๋ ์ฑ ํ๋ฉด ์ฝ๋(Flutter)๋ก ์ฎ๊ฒจ์ฃผ๋ ๋๊ตฌ์
๋๋ค.
๋๋ฉด(ํผ๊ทธ๋ง)์ ๊ฑด๋ค๋ฉด ์ฐ๋ฆฌ ํ์ฌ ํ์ค ๋ถํ(CoUI)์ผ๋ก ์ค์ ํ๋ฉด์ ์กฐ๋ฆฝํด ์ฃผ๋ ์
์ด์์.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ๋์์ด๋๊ฐ ๋ง๋ ํผ๊ทธ๋ง ํ๋ฉดยท์ปดํฌ๋ํธ๋ฅผ ์ค์ ์ฑ ํ๋ฉด์ผ๋ก ๋ง๋ค์ด์ผ ํ ๋
- ์ฐ๋ฆฌ ํ์ฌ ๋์์ธ ์์คํ
(CoUI)์ ๋ง์ถฐ ๋ฒํผยท์นด๋ยท์
๋ ฅ์ฐฝ ๊ฐ์ UI๋ฅผ ์๋ก ๋ง๋ค ๋
- ๋น ๋ฅด๊ฒ
/ui, /21, /coui ๊ฐ์ ์งง์ ๋ณ์นญ์ผ๋ก ํธ์ถํ๊ณ ์ถ์ ๋
๋ฌด์์ ํด์ฃผ๋์#
- ํผ๊ทธ๋ง ํ๋ฉด์ ๋ถ์ํด ์ฐ๋ฆฌ ํ์ค ๋ถํ(CoUI ์์ ฏ)์ผ๋ก ๋ฐ๊พผ ํ๋ฉด ์ฝ๋(Widget ํ์ผ) ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
- ์์ยท๊ธ์ยท๊ฐ๊ฒฉ์ ์์๋ก ์ ํ์ง ์๊ณ ํ์ฌ ๋์์ธ ํ ํฐ(์ ํด์ง ์ยท๊ธ๊ผดยท์ฌ๋ฐฑ ๊ท์น)์ ๋ง์ถฅ๋๋ค.
-
๋ง๋ ์ปดํฌ๋ํธ๋ฅผ ํด๋น ๊ธฐ๋ฅ ํด๋์ ๋ฐฐ์นํ๊ณ , ์ปดํฌ๋ํธ ์นดํ๋ก๊ทธ(Widgetbook UseCase) ์ ํ
์คํธ ํ์ผ๊น์ง ํจ๊ป ๋ง๋ค์ด ์ค๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ๋ฒํผ ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
/flutter-ui button --name SubmitButton --feature common
# ํผ๊ทธ๋ง ์นด๋ ๋์์ธ์ ๋ณํํ๊ธฐ (--figma-node ๋ก ํผ๊ทธ๋ง ๋
ธ๋ ์ง์ )
/flutter-ui card --figma-node 12:345 --name ProductCard --feature store
# ํ๋ฉด ์ ์ฒด๋ฅผ ๋ณํํ๊ธฐ
/flutter-ui page --figma-node 1:100 --name HomePage --feature home
-
component_type(ํ์): ๋ง๋ค ์ข
๋ฅ โ button, card, form, page
๋ฑ
--figma-node: ๋ณํํ ํผ๊ทธ๋ง ๋
ธ๋ ID (์: 12:345)
--name: ์ปดํฌ๋ํธ ์ด๋ฆ (์: ProductCard)
--feature: ์ด๋ ๊ธฐ๋ฅ ๋ชจ๋์ ๋ฃ์์ง (์: home, store)
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
- ํผ๊ทธ๋ง ๋ถ์ โ ์ง์ ํ ํผ๊ทธ๋ง ๋
ธ๋์ ๊ตฌ์กฐยท์์ยทํ
์คํธ๋ฅผ ์ฝ์ด ๋ค์
๋๋ค.
- ๋ถํ ๋งค์นญ โ ํผ๊ทธ๋ง ์์๋ฅผ ์ฐ๋ฆฌ ํ์ค ๋ถํ(CoUI ์์ ฏ)๊ณผ ์์ยท๊ธ๊ผด ๊ท์น์ 1:1๋ก ์ฐ๊ฒฐํฉ๋๋ค.
- ํ๋ฉด ์ฝ๋ ์์ฑ โ ์ฐ๊ฒฐํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ค์ Flutter ํ๋ฉด ์ฝ๋๋ฅผ ๋ง๋ค๊ณ , ํ๋ฉด ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฐ์ํ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ํ๋ก์ ํธ์ ํตํฉ โ ๋ง๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฅ ํด๋์ ๋ฃ๊ณ , ์ปดํฌ๋ํธ ์นดํ๋ก๊ทธ์ ํ
์คํธ ํ์ผ๊น์ง ํจ๊ป ์ ๋ฆฌํฉ๋๋ค.
โ๏ธ ์์ธ ์ต์
ยท์คํ ๋ช
์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Triggers#
- When converting Figma frames/components to Flutter
- CoUI design system based UI development
- When using
/ui, /21 keywords
Context Trigger Pattern#
/flutter-ui {component_type} [--options]
Parameters#
| Parameter | Required | Description | Example |
|---|
component_type | โ
| Component type | button, card, form, page |
--figma-node | โ | Figma node ID | 12:345 |
--name | โ | Component name | ProductCard |
--feature | โ | Feature module | home, store |
Execution Flow#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Figma ๋
ธ๋ ๋ถ์ (MCP: figma) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข get_selection / get_node_info โ
โ โข extract_tailwind โ
โ โข scan_text_nodes โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. CoUI ์ปดํฌ๋ํธ ๋งคํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข Figma ํด๋์ค โ CoUI ์์ ฏ (Co < X > ) โ
โ โข ์์ ๋ณ์ โ appColors / colorScheme โ
โ โข ํ์ดํฌ๊ทธ๋ํผ โ context.textStyles โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Flutter ์ฝ๋ ์์ฑ (MCP: magic) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข 21st_magic_component_builder โ
โ โข Widget ๊ตฌ์กฐ ์์ฑ โ
โ โข ๋ฐ์ํ ๋ ์ด์์ ์ ์ฉ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. ํ๋ก์ ํธ ํตํฉ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข Feature ์์ ฏ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์น โ
โ โข Generate Widgetbook UseCase โ
โ โข ํ
์คํธ ํ์ผ ์์ฑ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
CoUI Design System#
Color Mapping#
// Figma Variable โ Flutter (context.theme.colorScheme / context.appColors)
base-100 โ colorScheme.base100
base-200 โ colorScheme.base200
base-300 โ colorScheme.base300
primary โ colorScheme.primary
secondary โ colorScheme.secondary
neutral-* โ context.appColors.neutralN
Component Mapping#
| Figma | Flutter/CoUI | Notes |
|---|
| btn | CoButton(variant: ...) | no Button.primary() |
| card | CoCard | |
| input | CoInput(type: ...) / CoTextField (labelled) | no FormTextField |
| modal | CoDialog | |
| drawer | CoDrawer | |
| navbar | AppBar (in Scaffold(headers: [...])) | no CoAppBar |
| avatar | CoAvatar | |
| badge | CoBadge(variant: ...) | no PrimaryBadge |
| tabs | TabList + Tab | no CoTabBar |
| icon | CoIcon(CoLucideIcons.x) | no HeroIcon |
| spacing | CoGap.spaceN() / CoGap(gapStyle: CoreGapStyle(...)) | no Gap.s*, no CoGap(size: CoreSpace.spaceN) (v0.92) |
Typography#
// Figma text style โ context.textStyles.<size><weight>
headline-lg โ context.textStyles.xlBold
headline-md โ context.textStyles.lgBold
body-lg โ context.textStyles.baseNormal
body-md โ context.textStyles.smNormal
label-lg โ context.textStyles.smSemibold
Output Template#
import 'package:core/core.dart';
/// {component_name} widget
///
/// Figma: {figma_node_link}
class {ComponentName} extends StatelessWidget {
const {ComponentName}({
required this.title,
this.onTap,
super.key,
});
final String title;
final VoidCallback? onTap;
@override
Widget build(BuildContext context) {
// CoUI Co<X> ์์ ฏ์ผ๋ก ๊ตฌ์ฑ (CoButton / CoBadge / CoCard / CoGap / CoIcon)
return CoButton(
onPressed: onTap,
child: Text(title, style: context.textStyles.baseSemibold),
);
}
}
@UseCase(name: 'Default', type: {ComponentName})
Widget buildDefault(BuildContext context) {
return const {ComponentName}(
title: 'Sample Title',
);
}
MCP Integration#
| Phase | MCP Server | Tool |
|---|
| Figma analysis | figma | get_node_info, extract_tailwind |
| UI generation | magic | 21st_magic_component_builder |
| Code search | serena | find_symbol, search_for_pattern |
Core Rules#
- Prefer
const constructor super.key always last parameter- Break into small reusable units
Styling#
- No hardcoded colors -> use
context.theme.colorScheme.* / context.appColors.* - Typography ->
context.textStyles.<size><weight> (no Text().lg.bold chaining) - Spacing ->
CoGap.spaceN() / CoGap(gapStyle: CoreGapStyle(...)) (no Gap.s* / Spacing.s* / Insets.* / CoGap(size: CoreSpace.spaceN) v0.92) withOpacity() prohibited -> use withValues(alpha:)- No magic numbers -> use design tokens (
CoreSpace)
Responsive#
- Utilize
LayoutBuilder or MediaQuery - Minimum touch target 48x48
Examples#
/flutter-ui button --name SubmitButton --feature common
Figma Card Conversion#
/flutter-ui card --figma-node 12:345 --name ProductCard --feature store
Full Page Conversion#
/flutter-ui page --figma-node 1:100 --name HomePage --feature home
References#
- Detailed implementation:
.claude/agents/flutter-ui.md - CoUI components:
package/coui/ - Color system:
package/resources/lib/src/core/theme/