전체 UI 색상 통일 - 제각각이던 빨강/주황/파랑 계열을 의미별 토큰 4종으로 정리

danger/warning/success/approved(+각 Bg 버전)를 AppPalette에 추가하고,
화면마다 다르게 쓰이던 Colors.red[400/600/700]/redAccent, orange/amber
계열, blue 계열 리터럴을 전부 해당 토큰으로 교체. NFC 체크인 화면의
홀로 튀던 Colors.blueAccent도 함께 정리.
This commit is contained in:
2026-09-30 06:29:37 +00:00
parent 153c341efc
commit 9fe3e61c1c
17 changed files with 137 additions and 94 deletions
+21 -19
View File
@@ -360,8 +360,10 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
final bool isPending = student['attendanceStatus'] == 'PENDING';
final bool isComplete = student['attendanceStatus'] == 'COMPLETE';
final Color statusColor = hasViolation
? Colors.red
: (isPending ? Colors.orange : (isComplete ? Colors.blue : Colors.red));
? AppPalette.danger
: (isPending
? AppPalette.warning
: (isComplete ? AppPalette.approved : AppPalette.danger));
final String statusLine = hasViolation
? '무단반출 (${student['violationTime']})'
: (isPending
@@ -373,10 +375,10 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
return Container(
padding: const EdgeInsets.all(14),
decoration: BoxDecoration(
color: hasViolation ? Colors.red[50] : AppPalette.paper,
color: hasViolation ? AppPalette.dangerBg : AppPalette.paper,
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: hasViolation ? Colors.red[300]! : AppPalette.sage,
color: hasViolation ? AppPalette.danger : AppPalette.sage,
width: hasViolation ? 1.5 : 1,
),
boxShadow: [
@@ -451,10 +453,10 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: hasViolation
? Colors.red[700]
? AppPalette.danger
: (isPending
? Colors.orange[800]
: (isComplete ? Colors.grey[600] : Colors.red[400])),
? AppPalette.warning
: (isComplete ? Colors.grey[600] : AppPalette.danger)),
fontSize: 11.5,
fontWeight: hasViolation ? FontWeight.bold : FontWeight.normal,
),
@@ -470,7 +472,7 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
student['studentName'],
),
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red[600],
backgroundColor: AppPalette.danger,
foregroundColor: Colors.white,
padding: EdgeInsets.zero,
),
@@ -781,18 +783,18 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
final bool isPending = student['attendanceStatus'] == 'PENDING';
final bool isComplete = student['attendanceStatus'] == 'COMPLETE';
final Color background = hasViolation
? Colors.red[50]!
? AppPalette.dangerBg
: isComplete
? Colors.blue[50]!
? AppPalette.approvedBg
: isPending
? Colors.orange[50]!
? AppPalette.warningBg
: AppPalette.paper;
final Color border = hasViolation
? Colors.red[300]!
? AppPalette.danger
: isComplete
? Colors.blue[200]!
? AppPalette.approved
: isPending
? Colors.orange[200]!
? AppPalette.warning
: AppPalette.sage;
return InkWell(
@@ -828,7 +830,7 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
'무단반출',
style: TextStyle(
fontSize: 7.5,
color: Colors.red[700],
color: AppPalette.danger,
fontWeight: FontWeight.bold,
),
),
@@ -849,19 +851,19 @@ class _TeacherAttendancePageState extends State<TeacherAttendancePage> {
margin: const EdgeInsets.fromLTRB(16, 8, 16, 0),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
decoration: BoxDecoration(
color: Colors.amber[100],
color: AppPalette.warningBg,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.amber[400]!),
border: Border.all(color: AppPalette.warning),
),
child: Row(
children: [
Icon(Icons.lock_open_rounded, color: Colors.amber[800], size: 20),
Icon(Icons.lock_open_rounded, color: AppPalette.warning, size: 20),
const SizedBox(width: 8),
Expanded(
child: Text(
'지금 전체 반출 허용 중입니다 ($until 까지) — 이 시간 동안은 무단반출 경고가 뜨지 않아요.',
style: TextStyle(
color: Colors.amber[900],
color: AppPalette.warning,
fontWeight: FontWeight.bold,
fontSize: 12.5,
),