구조색 4종(mist/paper/linen/sage)을 const에서 뺀 뒤 AppPalette.applyTemplateTheme() 으로 템플릿 장착/해제 시 한 번에 바꿔치기하게 했다. 이 4개는 전부 "배경/카드/ 구분선" 용도로만 쓰이던 색이라, 장착 즉시 거의 모든 화면(백품타 포함, AppPalette.mist/ paper/sage를 쓰는 화면이면 코드 수정 없이 자동 반영)의 배경·카드·테두리가 테마를 따라간다. ink는 텍스트/버튼 등 너무 광범위하게 쓰여서 그대로 고정. 제목 알약(TitlePill, 24개 화면이 공유)은 ink를 직접 바꾸면 안 되므로 별도로 globalProfileTheme(ValueNotifier) 하나를 구독해서 배경을 theme.secondary로 바꾸게 했다 - 이 위젯 하나만 고쳐서 모든 화면의 제목 배경에 한 번에 적용. 백품타(study_timer_screen)는 시작/재개 버튼과 큰 타이머 숫자처럼 "중립" 요소만 테마 강조색(accent)으로 바꾸고, 일시정지(warning)/종료(danger) 같은 경고성 색은 의미가 있어서 그대로 뒀다. main_dashboard/profile_customize_screen은 실제로 장착이 바뀔 때마다 applyGlobalProfileTheme()을 호출해 위 두 전역 상태를 동기화한다. 구조색을 const에서 빼면서 기존에 const로 선언돼 있던 지점 몇 곳 (app_notice, device_checkout_ledger_page, group_detail_screen, main_dashboard, teacher_attendance_page)에서 const 컴파일 에러가 나서 해당 const 키워드만 제거해 수정했다.
46 lines
2.6 KiB
Dart
46 lines
2.6 KiB
Dart
// 🎨 앱 전역 무채색 팔레트 (coolors.co: 1c1c1c-daddd8-ecebe4-eef0f2-fafaff).
|
|
// 배경/카드/배너 같은 구조적 색상은 전부 이 5색으로 통일한다.
|
|
// 삭제/위반/거절처럼 사용자가 즉시 알아채야 하는 경고성 색상(빨강 등)만 예외로 유지한다.
|
|
//
|
|
// 🛍️ mist/paper/linen/sage(구조색 4종)는 프로필 꾸미기 템플릿을 장착하면 화면
|
|
// 전체에 그 테마가 번지도록 const를 빼고 바꿔치기 가능하게 했다. ink는 텍스트/
|
|
// 버튼 등 너무 많은 곳에서 쓰여서 바꾸면 가독성이 깨질 수 있어 그대로 고정 둔다.
|
|
// applyTemplateTheme()로만 바꾸고, 직접 대입하지 않는다.
|
|
import 'package:flutter/material.dart';
|
|
import 'profile_themes.dart';
|
|
|
|
class AppPalette {
|
|
AppPalette._();
|
|
|
|
static const Color ink = Color(0xFF1C1C1C); // 가장 어두운 톤 — 배너/주요 텍스트/버튼
|
|
|
|
static const Color _defaultSage = Color(0xFFDADDD8);
|
|
static const Color _defaultLinen = Color(0xFFECEBE4);
|
|
static const Color _defaultMist = Color(0xFFEEF0F2);
|
|
static const Color _defaultPaper = Color(0xFFFAFAFF);
|
|
|
|
static Color sage = _defaultSage; // 보더/구분선/보조 표면
|
|
static Color linen = _defaultLinen; // 은은한 카드/배지 배경
|
|
static Color mist = _defaultMist; // 페이지 배경
|
|
static Color paper = _defaultPaper; // 카드 표면(거의 흰색)
|
|
|
|
/// 🛍️ 장착한 템플릿에 맞춰 구조색 4종을 한 번에 바꾼다. null을 주면 기본값으로 복원.
|
|
static void applyTemplateTheme(ProfileTheme? theme) {
|
|
mist = theme?.background ?? _defaultMist;
|
|
paper = theme?.surface ?? _defaultPaper;
|
|
linen = theme?.surfaceAlt ?? _defaultLinen;
|
|
sage = theme?.border ?? _defaultSage;
|
|
}
|
|
|
|
// 🚨 경고성 색상 3종 - 예전엔 화면마다 Colors.red/red[400]/red[700]/redAccent처럼
|
|
// 제각각 써서 같은 의미인데 색이 미묘하게 달랐다. 이제 의미별로 딱 하나씩만 쓴다.
|
|
static const Color danger = Color(0xFFE13B3B); // 삭제/위반/거절/신고 등 위험/경고
|
|
static const Color dangerBg = Color(0xFFFCE9E9); // danger의 연한 배경(배지 등)
|
|
static const Color warning = Color(0xFFF08A24); // 대기중/수업중/진행중 등 주의
|
|
static const Color warningBg = Color(0xFFFDF0E1); // warning의 연한 배경
|
|
static const Color success = Color(0xFF2E9E5B); // 완료/성공(NFC 스캔 성공 등)
|
|
static const Color successBg = Color(0xFFE4F5EB); // success의 연한 배경
|
|
static const Color approved = Color(0xFF3B78C2); // 승인됨/완료 상태 표시
|
|
static const Color approvedBg = Color(0xFFE7F0FA); // approved의 연한 배경
|
|
}
|