템플릿 테마를 앱 전체로 확장 - 제목 알약, 백품타, 모든 화면 배경/카드색

구조색 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 키워드만 제거해 수정했다.
This commit is contained in:
2026-10-01 07:09:06 +00:00
parent 726d2dc632
commit f6be60ef46
10 changed files with 116 additions and 35 deletions
+8 -3
View File
@@ -6,6 +6,7 @@ import 'package:flutter/services.dart';
import '../function/browser_notification.dart';
import '../function/study_timer_controller.dart';
import '../theme/app_palette.dart';
import '../theme/theme_sync.dart';
import 'app_notice.dart';
import 'launchpad_transition.dart';
import 'study_preset_screen.dart';
@@ -117,6 +118,10 @@ class _StudyTimerScreenState extends State<StudyTimerScreen>
}
}
// 🛍️ 장착한 템플릿의 강조색 - 시작/재개처럼 "중립" 상태의 버튼/텍스트에만 쓴다.
// 일시정지(warning)/종료(danger) 같은 경고성 색은 의미가 있어서 그대로 둔다.
Color get _accentColor => globalProfileTheme.value?.accent ?? AppPalette.ink;
String _formatHMS(int totalSeconds) {
final h = totalSeconds ~/ 3600;
final m = (totalSeconds % 3600) ~/ 60;
@@ -430,7 +435,7 @@ class _StudyTimerScreenState extends State<StudyTimerScreen>
style: TextStyle(
fontSize: 52,
fontWeight: FontWeight.bold,
color: isPaused ? Colors.grey : AppPalette.ink,
color: isPaused ? Colors.grey : _accentColor,
),
),
const SizedBox(height: 36),
@@ -471,7 +476,7 @@ class _StudyTimerScreenState extends State<StudyTimerScreen>
size: 140,
icon: Icons.play_arrow_rounded,
label: _controller.pomodoroEnabled ? '뽀모도로 시작' : '공부 시작',
color: AppPalette.ink,
color: _accentColor,
onTap: () {
requestNotificationPermission();
_runAction(_controller.start);
@@ -495,7 +500,7 @@ class _StudyTimerScreenState extends State<StudyTimerScreen>
size: 110,
icon: isPaused ? Icons.play_arrow_rounded : Icons.pause_rounded,
label: isPaused ? '재개' : '일시정지',
color: isPaused ? AppPalette.ink : AppPalette.warning,
color: isPaused ? _accentColor : AppPalette.warning,
onTap: () =>
_runAction(isPaused ? _controller.resume : _controller.pause),
),