Claude-skill-registry component-usage

동구라미 앱 컴포넌트 라이브러리 사용 가이드. UI 컴포넌트 구현, 스타일 커스터마이징, 위젯 활용법 안내. Keywords: component, widget, ui, style, button, dialog, text field, chip, app bar, drawer

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/component-usage" ~/.claude/skills/majiayu000-claude-skill-registry-component-usage && rm -rf "$T"
manifest: skills/data/component-usage/SKILL.md
source content

동구라미 컴포넌트 라이브러리

개요

동구라미 앱의 재사용 가능한 UI 컴포넌트 라이브러리입니다. 모든 컴포넌트는

lib/widgets/{component_name}/
폴더에 위치하며, 스타일 분리 패턴을 따릅니다.

컴포넌트 아키텍처

폴더 구조

lib/widgets/
├── {component_name}/
│   ├── {component_name}.dart        # 컴포넌트 구현
│   └── {component_name}_styles.dart # 스타일 클래스

스타일 패턴

// 1. 기본 스타일 사용
MyComponent()

// 2. 커스텀 스타일 사용
MyComponent(
  style: MyComponentStyle.defaultStyle.copyWith(
    backgroundColor: Colors.blue,
  ),
)

컴포넌트 목록

네비게이션 & 레이아웃

컴포넌트설명문서
AppBar메인 화면용 커스텀 앱바app-bar.md
DetailAppBar상세 화면용 앱바 (뒤로가기 + 제목)detail-app-bar.md
DrawerMenu드로어 메뉴 (로그인/비로그인 통합)drawer-menu.md
DrawerItem드로어 메뉴 아이템drawer-item.md
DrawerEventItem드로어 이벤트 아이템drawer-event-item.md

필터 & 선택

컴포넌트설명문서
FilterTabBar전체/모집중 필터 탭filter-tab-bar.md
CategoryFilterButton카테고리 필터 버튼category-filter-button.md
CategoryPicker카테고리 선택 다이얼로그category-picker.md
RemovableChip삭제 가능한 칩removable-chip.md
SelectedCategoryChipList선택된 카테고리 칩 목록selected-category-chip-list.md

입력 필드

컴포넌트설명문서
RoundedTextField둥근 텍스트 필드rounded-text-field.md
RoundedEmailField둥근 이메일 필드rounded-email-field.md
EmailTextField이메일 텍스트 필드email-text-field.md
EmailTextFieldWithButton버튼 포함 이메일 필드email-text-field-with-button.md
RoundedDropdown둥근 드롭다운rounded-dropdown.md

다이얼로그 & 오버레이

컴포넌트설명문서
AlertTextDialog알림 다이얼로그alert-text-dialog.md
CircleCertificateDialog인증 코드 다이얼로그circle-certificate-dialog.md
MajorPickerDialog학과 선택 다이얼로그major-picker-dialog.md
PolicyDialog약관 다이얼로그policy-dialog.md
NotificationOverlay알림 오버레이notification-overlay.md
CircleDetailOverlay동아리 상세 오버레이circle-detail-overlay.md

동아리 관련

컴포넌트설명문서
CircleList동아리 목록circle-list.md
CircleItem동아리 아이템circle-item.md
CircleGroup동아리 그룹circle-group.md
CircleDetailItem동아리 상세 아이템circle-detail-item.md

기타

컴포넌트설명문서
TextFontWidget텍스트 폰트 헬퍼text-font-widget.md
NoticeList공지사항 목록notice-list.md
CloudMessagingFCM 메시징 위젯cloud-messaging.md

테마 색상

용도색상 코드설명
Primary
#FFB052
브랜드 주 색상 (오렌지)
Primary Dark
#FF9A21
브랜드 진한 색상
Background
#F0F2F5
배경 회색
Text Primary
#000000
주 텍스트 색상
Text Secondary
#767676
보조 텍스트 색상
Text Tertiary
#A8A8A8
연한 텍스트 색상
Border
#DBDBDB
기본 테두리 색상
Divider
#CECECE
구분선 색상

새 컴포넌트 추가 가이드

1. 폴더 생성

mkdir lib/widgets/{new_component}

2. 스타일 파일 생성

// lib/widgets/{new_component}/{new_component}_styles.dart
import 'package:flutter/material.dart';

class NewComponentStyle {
  final Color backgroundColor;

  const NewComponentStyle({
    this.backgroundColor = Colors.white,
  });

  static const NewComponentStyle defaultStyle = NewComponentStyle();

  NewComponentStyle copyWith({Color? backgroundColor}) {
    return NewComponentStyle(
      backgroundColor: backgroundColor ?? this.backgroundColor,
    );
  }
}

3. 컴포넌트 파일 생성

// lib/widgets/{new_component}/{new_component}.dart
import 'package:flutter/material.dart';
import '{new_component}_styles.dart';

class NewComponent extends StatelessWidget {
  final NewComponentStyle style;

  const NewComponent({
    super.key,
    this.style = NewComponentStyle.defaultStyle,
  });

  @override
  Widget build(BuildContext context) {
    return Container(color: style.backgroundColor);
  }
}