전체 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
+22 -19
View File
@@ -106,7 +106,7 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
title: const Row(
children: [
Icon(Icons.warning_amber_rounded, color: Colors.orange),
Icon(Icons.warning_amber_rounded, color: AppPalette.warning),
SizedBox(width: 8),
Text('많은 시간요청 학생'),
],
@@ -147,7 +147,7 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
'${_timeRange(r['requestedStart'], r['requestedEnd'])} '
'(약 ${hours?.toStringAsFixed(1)}시간)',
style: const TextStyle(
color: Colors.orange,
color: AppPalette.warning,
fontWeight: FontWeight.bold,
fontSize: 13,
),
@@ -172,8 +172,10 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
_reject(r['id']);
},
style: OutlinedButton.styleFrom(
foregroundColor: Colors.red,
side: const BorderSide(color: Colors.red),
foregroundColor: AppPalette.danger,
side: const BorderSide(
color: AppPalette.danger,
),
),
child: const Text('거절'),
),
@@ -224,13 +226,13 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
({Color color, String label}) _statusInfo(String status) {
switch (status) {
case 'PENDING':
return (color: Colors.orange, label: '대기중');
return (color: AppPalette.warning, label: '대기중');
case 'APPROVED':
return (color: Colors.blue, label: '승인됨');
return (color: AppPalette.approved, label: '승인됨');
case 'RETURNED':
return (color: Colors.grey, label: '반납완료');
case 'REJECTED':
return (color: Colors.red, label: '거절됨');
return (color: AppPalette.danger, label: '거절됨');
default:
return (color: Colors.grey, label: status);
}
@@ -276,7 +278,7 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
icon: Badge(
isLabelVisible: longCount > 0,
label: Text('$longCount'),
backgroundColor: Colors.red,
backgroundColor: AppPalette.danger,
child: const Icon(Icons.warning_amber_rounded),
),
onPressed: _showLongRequestsDialog,
@@ -297,14 +299,14 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.orange[100],
color: AppPalette.warningBg,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.orange[400]!),
border: Border.all(color: AppPalette.warning),
),
child: Text(
'승인 대기 중인 요청이 $pendingCount건 있습니다.',
style: TextStyle(
color: Colors.orange[900],
color: AppPalette.warning,
fontWeight: FontWeight.bold,
),
),
@@ -340,15 +342,15 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
side: isLong
? BorderSide(
color: Colors.red[400]!,
? const BorderSide(
color: AppPalette.danger,
width: 2,
)
: (isPending
? BorderSide(
color: Colors.orange[300]!,
? const BorderSide(
color: AppPalette.warning,
)
: BorderSide(
: const BorderSide(
color: AppPalette.sage,
)),
),
@@ -419,7 +421,7 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
Text(
'${r['approvedByTeacherName']} 선생님이 허용했습니다',
style: TextStyle(
color: Colors.blue[700],
color: AppPalette.approved,
fontSize: 12,
fontWeight: FontWeight.w600,
),
@@ -438,9 +440,10 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
style:
OutlinedButton.styleFrom(
foregroundColor:
Colors.red,
AppPalette.danger,
side: const BorderSide(
color: Colors.red,
color:
AppPalette.danger,
),
),
child: const Text('거절'),