수학 학습 앱 MathLab의 디자인 시스템 및 UI/UX 가이드라인
Primary Blue: #4285F4 (주요 버튼, 활성 상태)
Secondary Blue: #E3F2FD (배경 하이라이트)
Success Green: #34A853 (연속 학습, 성공 상태)
Warning Orange: #FF6B35 (스트릭, 주의사항)
Error Red: #EA4335 (오답, 경고)
Purple Accent: #9C27B0 (특별 기능, 가이드)
Background: #F8F9FA (전체 배경)
Surface White: #FFFFFF (카드 배경)
Text Primary: #202124 (주요 텍스트)
Text Secondary: #5F6368 (보조 텍스트)
Border Light: #DADCE0 (구분선, 테두리)
Disabled: #9AA0A6 (비활성 요소)
XP Gold: #FFD700
Streak Orange: #FF6B35
Level Bronze: #CD7F32
Level Silver: #C0C0C0
Level Gold: #FFD700
Level Diamond: #B9F2FF
// Flutter 타이포그래피 예시
TextTheme(
displayLarge: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
displayMedium: TextStyle(fontSize: 28, fontWeight: FontWeight.bold),
headlineLarge: TextStyle(fontSize: 24, fontWeight: FontWeight.w600),
headlineMedium: TextStyle(fontSize: 20, fontWeight: FontWeight.w600),
titleLarge: TextStyle(fontSize: 18, fontWeight: FontWeight.w500),
titleMedium: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
bodyLarge: TextStyle(fontSize: 16, fontWeight: FontWeight.normal),
bodyMedium: TextStyle(fontSize: 14, fontWeight: FontWeight.normal),
labelLarge: TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
)
// Primary Button
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: primaryBlue,
foregroundColor: Colors.white,
borderRadius: BorderRadius.circular(12),
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
elevation: 2,
)
)
// Secondary Button
OutlinedButton(
style: OutlinedButton.styleFrom(
side: BorderSide(color: primaryBlue),
borderRadius: BorderRadius.circular(12),
)
)
Card(
elevation: 4,
borderRadius: BorderRadius.circular(16),
child: Padding(
padding: EdgeInsets.all(16),
// 내용
)
)
LinearProgressIndicator(
value: progress,
backgroundColor: Colors.grey[300],
valueColor: AlwaysStoppedAnimation<Color>(primaryBlue),
borderRadius: BorderRadius.circular(8),
)
┌─────────────────┐
│ Status Bar │ 24dp
├─────────────────┤
│ App Bar │ 56dp
├─────────────────┤
│ │
│ Main Content │ flexible
│ │
├─────────────────┤
│ Bottom Nav │ 56dp (선택적)
└─────────────────┘
Container(
height: 8,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
gradient: LinearGradient(
colors: [Color(0xFFFFD700), Color(0xFFFF8C00)]
)
)
)
// Bronze, Silver, Gold, Diamond 레벨별 색상
Map<String, Color> levelColors = {
'bronze': Color(0xFFCD7F32),
'silver': Color(0xFFC0C0C0),
'gold': Color(0xFFFFD700),
'diamond': Color(0xFFB9F2FF),
};
┌─────────────────────────────────────┐
│ 안녕하세요, 학습자님! 🔥 0일 │
│ 중1 수학을 학습하고 있어요 │
├─────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ ⚡ XP │ │ ⭐ 레벨 │ │ 🎯 연속 │ │
│ │ 0 │ │ 1 │ │ 0일 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
├─────────────────────────────────────┤
│ 오늘의 목표 0/100 XP │
│ ████████████████████████░░░░░░░░░░ │
├─────────────────────────────────────┤
│ 레슨 1 │
│ 다음 레슨까지 0/100 XP │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
├─────────────────────────────────────┤
│ 학습 시작하기 │
├─────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────┐ │
│ │ 📚 교과과정 학습 │ │ ❗ 오답노트 │ │
│ └─────────────────┘ └─────────────┘ │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ 중1 │ │ 중2 │ │ 고1 │ │
│ └─────┘ └─────┘ └─────┘ │
├─────────────────────────────────────┤
│ 🔢 1. 소인수분해 ▶ │
│ 1,2 자연수의 성질과 소인수분해를... │
│ 진행률 0% │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
├─────────────────────────────────────┤
│ ➕ 2. 정수와 유리수 ▶ │
│ + 정수와 유리수의 개념과 연산을... │
│ 진행률 0% │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
├─────────────────────────────────────┤
│ 💡 학습 가이드 │
│ 각 에피소드는 개념 학습 → 문제 풀이 │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ 0 │ │ 0 │ │ 0 │ │ 0 │ │
│ │총오답││미복습││1회복습││2회이상│ │
│ └─────┘ └─────┘ └─────┘ └─────┘ │
├─────────────────────────────────────┤
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ 전체 │ │미복습││ 1회 ││ 2회+│ │
│ └─────┘ └─────┘ └─────┘ └─────┘ │
├─────────────────────────────────────┤
│ 📈 │
│ 오답이 없습니다! │
│ 완벽한 학습을 이어가고 계시네요 🎉 │
├─────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────┐ │
│ │ 🔄 선택문제복습 │ │ 📚 맞춤복습세트│ │
│ │ (0) │ │ 만들기 │ │
│ └─────────────────┘ └─────────────┘ │
└─────────────────────────────────────┘
// 수학 기호 키보드 레이아웃
Row(
children: [
MathKeyButton('÷'),
MathKeyButton('×'),
MathKeyButton('+'),
MathKeyButton('-'),
MathKeyButton('='),
]
)
DragTarget<String>(
builder: (context, candidateData, rejectedData) {
return Container(
width: 100,
height: 50,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, style: BorderStyle.dashed),
borderRadius: BorderRadius.circular(8),
),
child: Center(child: Text('Drop Here')),
);
},
)
Container(
height: 200,
child: FlChart(
// 수학 그래프 렌더링
)
)
// 정답 시 성공 애니메이션
AnimatedContainer(
duration: Duration(milliseconds: 300),
decoration: BoxDecoration(
color: successGreen,
borderRadius: BorderRadius.circular(12),
),
)
// XP 획득 애니메이션
AnimatedDefaultTextStyle(
duration: Duration(milliseconds: 500),
style: TextStyle(
fontSize: isAnimating ? 24 : 16,
color: Colors.gold,
),
child: Text('+10 XP'),
)
class Breakpoints {
static const double mobile = 600;
static const double tablet = 1024;
static const double desktop = 1440;
}
LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth < Breakpoints.mobile) {
return MobileLayout();
} else if (constraints.maxWidth < Breakpoints.tablet) {
return TabletLayout();
} else {
return DesktopLayout();
}
}
)
홈: home
프로필: account_circle
설정: settings
통계: bar_chart
하트: favorite
스타: star
불꽃: local_fire_department
이 디자인 가이드를 Flutter 개발 시 참고하여 일관성 있고 사용자 친화적인 수학 학습 앱을 구축하시기 바랍니다.