diff --git a/lib/theme/app_palette.dart b/lib/theme/app_palette.dart new file mode 100644 index 0000000..d98f05a --- /dev/null +++ b/lib/theme/app_palette.dart @@ -0,0 +1,14 @@ +// ๐ŸŽจ ์•ฑ ์ „์—ญ ๋ฌด์ฑ„์ƒ‰ ํŒ”๋ ˆํŠธ (coolors.co: 1c1c1c-daddd8-ecebe4-eef0f2-fafaff). +// ๋ฐฐ๊ฒฝ/์นด๋“œ/๋ฐฐ๋„ˆ ๊ฐ™์€ ๊ตฌ์กฐ์  ์ƒ‰์ƒ์€ ์ „๋ถ€ ์ด 5์ƒ‰์œผ๋กœ ํ†ต์ผํ•œ๋‹ค. +// ์‚ญ์ œ/์œ„๋ฐ˜/๊ฑฐ์ ˆ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ‰์‹œ ์•Œ์•„์ฑ„์•ผ ํ•˜๋Š” ๊ฒฝ๊ณ ์„ฑ ์ƒ‰์ƒ(๋นจ๊ฐ• ๋“ฑ)๋งŒ ์˜ˆ์™ธ๋กœ ์œ ์ง€ํ•œ๋‹ค. +import 'package:flutter/material.dart'; + +class AppPalette { + AppPalette._(); + + static const Color ink = Color(0xFF1C1C1C); // ๊ฐ€์žฅ ์–ด๋‘์šด ํ†ค โ€” ๋ฐฐ๋„ˆ/์ฃผ์š” ํ…์ŠคํŠธ/๋ฒ„ํŠผ + static const Color sage = Color(0xFFDADDD8); // ๋ณด๋”/๊ตฌ๋ถ„์„ /๋ณด์กฐ ํ‘œ๋ฉด + static const Color linen = Color(0xFFECEBE4); // ์€์€ํ•œ ์นด๋“œ/๋ฐฐ์ง€ ๋ฐฐ๊ฒฝ + static const Color mist = Color(0xFFEEF0F2); // ํŽ˜์ด์ง€ ๋ฐฐ๊ฒฝ + static const Color paper = Color(0xFFFAFAFF); // ์นด๋“œ ํ‘œ๋ฉด(๊ฑฐ์˜ ํฐ์ƒ‰) +} diff --git a/lib/ui/admin_dashboard.dart b/lib/ui/admin_dashboard.dart index 738c1d4..0c99bcf 100644 --- a/lib/ui/admin_dashboard.dart +++ b/lib/ui/admin_dashboard.dart @@ -2,6 +2,7 @@ // ์„œ๋ฒ„ ํ†ต์‹ /์ƒํƒœ๋Š” lib/function/admin_controller.dart๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. import 'package:flutter/material.dart'; import '../function/admin_controller.dart'; +import '../theme/app_palette.dart'; import 'login_screen.dart'; // ========================================== @@ -71,10 +72,11 @@ class _AdminDashboardState extends State { listenable: _controller, builder: (context, _) { return Scaffold( + backgroundColor: AppPalette.mist, appBar: AppBar( title: const Text('๐Ÿ› ๏ธ ๊ด€๋ฆฌ์ž ์‹œ์Šคํ…œ'), - backgroundColor: Colors.orange, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, actions: [ IconButton( icon: const Icon(Icons.logout), @@ -94,7 +96,7 @@ class _AdminDashboardState extends State { const Icon( Icons.admin_panel_settings, size: 100, - color: Colors.orange, + color: AppPalette.ink, ), const SizedBox(height: 20), const Text( diff --git a/lib/ui/device_checkout_ledger_page.dart b/lib/ui/device_checkout_ledger_page.dart index f2401e5..387d61f 100644 --- a/lib/ui/device_checkout_ledger_page.dart +++ b/lib/ui/device_checkout_ledger_page.dart @@ -2,6 +2,7 @@ // ์„œ๋ฒ„ ํ†ต์‹ /์ƒํƒœ๋Š” lib/function/device_checkout_ledger_controller.dart๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. import 'package:flutter/material.dart'; import '../function/device_checkout_ledger_controller.dart'; +import '../theme/app_palette.dart'; class DeviceCheckoutLedgerPage extends StatefulWidget { final String? teacherId; @@ -91,13 +92,13 @@ class _DeviceCheckoutLedgerPageState extends State { .length; return Scaffold( - backgroundColor: Colors.grey[100], + backgroundColor: AppPalette.mist, appBar: AppBar( title: const Text( '๐Ÿ“ฑ ์Šค๋งˆํŠธ๊ธฐ๊ธฐ ๋ฐ˜์ถœ ๋Œ€์žฅ', style: TextStyle(fontWeight: FontWeight.bold), ), - backgroundColor: Colors.teal, + backgroundColor: AppPalette.ink, foregroundColor: Colors.white, elevation: 0, actions: [ @@ -154,13 +155,14 @@ class _DeviceCheckoutLedgerPageState extends State { final bool isPending = status == 'PENDING'; return Card( - elevation: 1, + elevation: 0, + color: AppPalette.paper, margin: const EdgeInsets.only(bottom: 10), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: isPending ? BorderSide(color: Colors.orange[300]!) - : BorderSide.none, + : BorderSide(color: AppPalette.sage), ), child: Padding( padding: const EdgeInsets.all(16), @@ -263,9 +265,9 @@ class _DeviceCheckoutLedgerPageState extends State { style: ElevatedButton.styleFrom( backgroundColor: - Colors.teal, + AppPalette.ink, foregroundColor: - Colors.white, + AppPalette.paper, ), child: const Text('์Šน์ธ'), ), diff --git a/lib/ui/device_checkout_request_screen.dart b/lib/ui/device_checkout_request_screen.dart index 06c1433..fd32257 100644 --- a/lib/ui/device_checkout_request_screen.dart +++ b/lib/ui/device_checkout_request_screen.dart @@ -2,6 +2,7 @@ // ์„œ๋ฒ„ ํ†ต์‹ /์ƒํƒœ๋Š” lib/function/device_checkout_controller.dart๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. import 'package:flutter/material.dart'; import '../function/device_checkout_controller.dart'; +import '../theme/app_palette.dart'; class DeviceCheckoutRequestScreen extends StatefulWidget { final String studentId; @@ -82,13 +83,13 @@ class _DeviceCheckoutRequestScreenState listenable: _controller, builder: (context, _) { return Scaffold( - backgroundColor: Colors.grey[100], + backgroundColor: AppPalette.mist, appBar: AppBar( title: const Text( '๐Ÿ“ฑ ์Šค๋งˆํŠธ๊ธฐ๊ธฐ ๋ฐ˜์ถœ ์‹ ์ฒญ', style: TextStyle(fontWeight: FontWeight.bold), ), - backgroundColor: Colors.teal, + backgroundColor: AppPalette.ink, foregroundColor: Colors.white, elevation: 0, ), @@ -110,14 +111,9 @@ class _DeviceCheckoutRequestScreenState Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( - color: Colors.white, + color: AppPalette.paper, borderRadius: BorderRadius.circular(24), - boxShadow: [ - BoxShadow( - color: Colors.black.withValues(alpha: 0.04), - blurRadius: 16, - ), - ], + border: Border.all(color: AppPalette.sage), ), child: Column( children: [ @@ -166,8 +162,8 @@ class _DeviceCheckoutRequestScreenState child: ElevatedButton( onPressed: _controller.isSubmitting ? null : _submit, style: ElevatedButton.styleFrom( - backgroundColor: Colors.teal, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), diff --git a/lib/ui/login_screen.dart b/lib/ui/login_screen.dart index 3897930..d2cf4fc 100644 --- a/lib/ui/login_screen.dart +++ b/lib/ui/login_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import '../config.dart' show schoolName; import '../function/login_controller.dart'; +import '../theme/app_palette.dart'; import 'main_dashboard.dart'; import 'teacher_register_screen.dart'; @@ -128,7 +129,7 @@ class _LoginScreenState extends State { ) : ElevatedButton( style: ElevatedButton.styleFrom( - backgroundColor: Colors.indigo, + backgroundColor: AppPalette.ink, foregroundColor: Colors.white, ), onPressed: () async { @@ -285,7 +286,7 @@ class _LoginScreenState extends State { listenable: _controller, builder: (context, _) { return Scaffold( - backgroundColor: Colors.grey[50], + backgroundColor: AppPalette.mist, body: Center( child: SingleChildScrollView( padding: const EdgeInsets.all(24.0), @@ -294,14 +295,14 @@ class _LoginScreenState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Icon(Icons.school, size: 80, color: Colors.indigo), + const Icon(Icons.school, size: 80, color: AppPalette.ink), const SizedBox(height: 16), Text( '$schoolName ๋ชจ๋‹ˆํ„ฐ', style: const TextStyle( fontSize: 26, fontWeight: FontWeight.bold, - color: Colors.indigo, + color: AppPalette.ink, ), ), const SizedBox(height: 8), @@ -339,7 +340,7 @@ class _LoginScreenState extends State { height: 55, child: ElevatedButton( style: ElevatedButton.styleFrom( - backgroundColor: Colors.indigo, + backgroundColor: AppPalette.ink, foregroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), @@ -366,7 +367,7 @@ class _LoginScreenState extends State { child: const Text( '๐Ÿ‘จโ€๐Ÿซ ์„ ์ƒ๋‹˜์ด์‹ ๊ฐ€์š”? ๊ต์‚ฌ ํšŒ์›๊ฐ€์ž… ํ•˜๊ธฐ', style: TextStyle( - color: Colors.indigo, + color: AppPalette.ink, fontWeight: FontWeight.bold, ), ), diff --git a/lib/ui/main_dashboard.dart b/lib/ui/main_dashboard.dart index c69de2b..cba8cec 100644 --- a/lib/ui/main_dashboard.dart +++ b/lib/ui/main_dashboard.dart @@ -4,6 +4,7 @@ // ๊ณ„์ • ๊ฐ•์ œ ์‚ญ์ œ ์„œ๋ฒ„ ํ†ต์‹ ์€ lib/function/student_dashboard_controller.dart๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. import 'package:flutter/material.dart'; import '../function/student_dashboard_controller.dart'; +import '../theme/app_palette.dart'; import 'admin_dashboard.dart'; import 'device_checkout_ledger_page.dart'; import 'device_checkout_request_screen.dart'; @@ -160,34 +161,34 @@ class _MainDashboardState extends State { ); } - // ๐ŸŽจ [์—ญํ• ๋ณ„ ํ…Œ๋งˆ] ๋ฐฐ๋„ˆ ์ƒ‰์ƒ/์ œ๋ชฉ/๋ฌธ๊ตฌ๋งŒ ์—ญํ• ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ. ๋ ˆ์ด์•„์›ƒ ์ž์ฒด๋Š” ๊ณตํ†ต. + // ๐ŸŽจ [์—ญํ• ๋ณ„ ํ…Œ๋งˆ] ๋ฐฐ๋„ˆ ์ƒ‰์ƒ์€ ํŒ”๋ ˆํŠธ๋กœ ํ†ต์ผํ•˜๊ณ , ์ œ๋ชฉ/๋ฌธ๊ตฌ/์•„์ด์ฝ˜๋งŒ ์—ญํ• ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ. ({String title, String subtitle, Color color, IconData icon}) _theme() { if (_isDeveloper) { return ( title: '๐Ÿ‘‘ MASTER CONTROL', subtitle: '์ตœ๊ณ  ๊ด€๋ฆฌ ๊ถŒํ•œ ํ™œ์„ฑํ™”๋จ', - color: Colors.deepPurple[700]!, + color: AppPalette.ink, icon: Icons.admin_panel_settings_rounded, ); } else if (widget.role == 'admin') { return ( title: '๐Ÿ› ๏ธ ADMIN CONTROL', subtitle: '์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ™œ์„ฑํ™”๋จ', - color: Colors.deepPurple[700]!, + color: AppPalette.ink, icon: Icons.admin_panel_settings_rounded, ); } else if (widget.role == 'teacher') { return ( title: '๐Ÿ‘จโ€๐Ÿซ TEACHER PORTAL', subtitle: '๊ต์ง์› ๋ฒˆํ˜ธ: $_displayId | ๊ต์‚ฌ ๊ถŒํ•œ ํ™œ์„ฑํ™”๋จ', - color: Colors.green[700]!, + color: AppPalette.ink, icon: Icons.admin_panel_settings_rounded, ); } return ( title: '๐ŸŽ“ STUDENT PORTAL', subtitle: 'ํ•™๋ฒˆ: $_displayId | ์ธ์ฆ ์™„๋ฃŒ', - color: Colors.indigo[700]!, + color: AppPalette.ink, icon: Icons.school_rounded, ); } @@ -200,7 +201,7 @@ class _MainDashboardState extends State { final theme = _theme(); return Scaffold( - backgroundColor: Colors.grey[100], + backgroundColor: AppPalette.mist, appBar: AppBar( title: Text( theme.title, @@ -250,7 +251,7 @@ class _MainDashboardState extends State { ), child: CircleAvatar( radius: 30, - backgroundColor: theme.color.withValues(alpha: 0.08), + backgroundColor: AppPalette.linen, child: Icon(theme.icon, size: 32, color: theme.color), ), ), @@ -298,7 +299,7 @@ class _MainDashboardState extends State { style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, - color: Colors.black87, + color: AppPalette.ink, ), ), ], @@ -335,8 +336,8 @@ class _MainDashboardState extends State { ? '์ถœ์„ ๋ฐ ํฐ ์ˆ˜๊ฑฐ ์™„๋ฃŒ' : 'โš ๏ธ ๋ณธ์ธ ์ธ์ฆ ๊ธฐ๊ธฐ ์ „์šฉ', color: widget.isDeviceMatched - ? Colors.blue - : Colors.grey[400]!, + ? AppPalette.ink + : AppPalette.sage, onTap: widget.isDeviceMatched ? () => _openPocketCheckIn(context) : () { @@ -358,7 +359,7 @@ class _MainDashboardState extends State { icon: Icons.fastfood_rounded, title: '์‹ค์‹œ๊ฐ„ ํ•™๊ต ์ƒํ™ฉ', subtitle: '๊ธ‰์‹์‹ค ์ค„ & ๋งค์  ์žฌ๊ณ  ํ™•์ธ', - color: Colors.orange[700]!, + color: AppPalette.ink, onTap: () { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( @@ -374,7 +375,7 @@ class _MainDashboardState extends State { icon: Icons.tablet_mac_rounded, title: '์Šค๋งˆํŠธ๊ธฐ๊ธฐ ๋ฐ˜์ถœ', subtitle: 'ํŒจ๋“œ ์‚ฌ์šฉ ์‹ ์ฒญ (์‹œ๊ฐ„/๋ชฉ์ )', - color: Colors.teal, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -393,7 +394,7 @@ class _MainDashboardState extends State { icon: Icons.assignment_turned_in_rounded, title: '์‹ค์‹œ๊ฐ„ ์ถœ์„ ํ™•์ธ', subtitle: 'ํ•™์ƒ ์ œ์ถœ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง', - color: Colors.blue, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -407,7 +408,7 @@ class _MainDashboardState extends State { icon: Icons.manage_accounts_rounded, title: 'ํ•™์ƒ ๊ณ„์ • ๊ด€๋ฆฌ', subtitle: '๊ณ„์ • ์ถ”๊ฐ€ ๋ฐ ๊ฐ•์ œ ๋ฆฌ์…‹', - color: Colors.orange, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -421,7 +422,7 @@ class _MainDashboardState extends State { icon: Icons.tablet_mac_rounded, title: '์Šค๋งˆํŠธ๊ธฐ๊ธฐ ๋ฐ˜์ถœ ๋Œ€์žฅ', subtitle: 'ํŒจ๋“œ ๋ฐ˜์ถœ ์‹ ์ฒญ ์Šน์ธ/๊ฑฐ์ ˆ', - color: Colors.teal, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -440,7 +441,7 @@ class _MainDashboardState extends State { icon: Icons.terminal_rounded, title: '์„œ๋ฒ„ DB ์ œ์–ด', subtitle: '์‹œ์Šคํ…œ ์›๊ฒฉ ์ดˆ๊ธฐํ™”', - color: Colors.amber[800]!, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -462,7 +463,7 @@ class _MainDashboardState extends State { icon: Icons.edit_note_rounded, title: 'NFC ํƒœ๊ทธ ์“ฐ๊ธฐ', subtitle: '์ฃผ๋จธ๋‹ˆ ์Šคํ‹ฐ์ปค ์ดˆ๊ธฐ ์„ค์ •', - color: Colors.deepPurple, + color: AppPalette.ink, onTap: () => Navigator.push( context, MaterialPageRoute( @@ -503,15 +504,9 @@ class _MainDashboardState extends State { child: Ink( padding: const EdgeInsets.all(20), decoration: BoxDecoration( - color: Colors.white, + color: AppPalette.paper, borderRadius: BorderRadius.circular(24), - boxShadow: [ - BoxShadow( - color: Colors.black.withValues(alpha: 0.04), - blurRadius: 16, - offset: const Offset(0, 4), - ), - ], + border: Border.all(color: AppPalette.sage, width: 1), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -520,7 +515,7 @@ class _MainDashboardState extends State { Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( - color: color.withValues(alpha: 0.1), + color: AppPalette.linen, borderRadius: BorderRadius.circular(16), ), child: Icon(icon, color: color, size: 28), @@ -537,7 +532,7 @@ class _MainDashboardState extends State { style: const TextStyle( fontSize: 15, fontWeight: FontWeight.bold, - color: Colors.black87, + color: AppPalette.ink, ), ), ), @@ -560,7 +555,7 @@ class _MainDashboardState extends State { subtitle, style: TextStyle( fontSize: 12, - color: Colors.grey[500], + color: AppPalette.ink.withValues(alpha: 0.55), height: 1.2, ), ), diff --git a/lib/ui/teacher_attendance_page.dart b/lib/ui/teacher_attendance_page.dart index d15ce44..44f7046 100644 --- a/lib/ui/teacher_attendance_page.dart +++ b/lib/ui/teacher_attendance_page.dart @@ -2,6 +2,7 @@ // ์„œ๋ฒ„ ํ†ต์‹ ยท์ƒํƒœยทํŒŒ์ƒ ๋กœ์ง์€ lib/function/teacher_attendance_controller.dart๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. import 'package:flutter/material.dart'; import '../function/teacher_attendance_controller.dart'; +import '../theme/app_palette.dart'; // ----------------------------------------------------------------------------- // ๐Ÿ“… [์„œ๋ธŒ ํ™”๋ฉด 1] ์‹ค์‹œ๊ฐ„ ์ถœ์„ ํ™•์ธ ๋ž€ (StudentDashboard ์นด๋“œ ์Šคํƒ€์ผ ๋ฆฌ์ŠคํŠธํ™”) @@ -202,13 +203,13 @@ class _TeacherAttendancePageState extends State { final int absentCount = totalCount - checkedInCount; return Scaffold( - backgroundColor: Colors.grey[100], + backgroundColor: AppPalette.mist, appBar: AppBar( title: const Text( '๐Ÿ“‹ ์‹ค์‹œ๊ฐ„ ์ถœ์„ ํ˜„ํ™ฉ', style: TextStyle(fontWeight: FontWeight.bold), ), - backgroundColor: Colors.blue, + backgroundColor: AppPalette.ink, foregroundColor: Colors.white, elevation: 0, actions: [ @@ -336,7 +337,7 @@ class _TeacherAttendancePageState extends State { width: 4, height: 16, decoration: BoxDecoration( - color: Colors.blue, + color: AppPalette.ink, borderRadius: BorderRadius.circular(2), ), ), @@ -346,7 +347,7 @@ class _TeacherAttendancePageState extends State { style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, - color: Colors.black87, + color: AppPalette.ink, ), ), const SizedBox(width: 6), @@ -396,11 +397,12 @@ class _TeacherAttendancePageState extends State { return Container( padding: const EdgeInsets.all(14), decoration: BoxDecoration( - color: hasViolation ? Colors.red[50] : Colors.white, + color: hasViolation ? Colors.red[50] : AppPalette.paper, borderRadius: BorderRadius.circular(20), - border: hasViolation - ? Border.all(color: Colors.red[300]!, width: 1.5) - : null, + border: Border.all( + color: hasViolation ? Colors.red[300]! : AppPalette.sage, + width: hasViolation ? 1.5 : 1, + ), boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: 0.03), @@ -590,7 +592,7 @@ class _TeacherAttendancePageState extends State { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( - color: Colors.white, + color: AppPalette.paper, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( @@ -639,7 +641,7 @@ class _TeacherAttendancePageState extends State { return Container( width: double.infinity, padding: const EdgeInsets.all(16), - color: const Color(0xFF1E293B), + color: AppPalette.ink, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ diff --git a/lib/ui/teacher_student_management_page.dart b/lib/ui/teacher_student_management_page.dart index f0e68c0..86b8ed1 100644 --- a/lib/ui/teacher_student_management_page.dart +++ b/lib/ui/teacher_student_management_page.dart @@ -5,6 +5,7 @@ import 'package:desktop_drop/desktop_drop.dart'; import 'package:flutter/material.dart'; import '../function/excel_file_picker.dart'; import '../function/teacher_student_management_controller.dart'; +import '../theme/app_palette.dart'; // ๐Ÿ“ "์‹ค์‹œ๊ฐ„ ์ถœ์„ ํ™•์ธ" ๋ชฉ๋ก(teacher_attendance_page.dart)์˜ ํƒ€์ผ ๊ทœ๊ฒฉ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ˜๋‹ค. const double kAttendanceTileWidth = 220; @@ -162,8 +163,8 @@ class _TeacherStudentManagementPageState _runBulkImport(rows); }, style: ElevatedButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), @@ -295,7 +296,7 @@ class _TeacherStudentManagementPageState builder: (ctx) => AlertDialog( title: const Text( 'โš ๏ธ ๊ธฐ๊ธฐ ๋“ฑ๋ก ์ดˆ๊ธฐํ™”', - style: TextStyle(fontWeight: FontWeight.bold, color: Colors.purple), + style: TextStyle(fontWeight: FontWeight.bold, color: AppPalette.ink), ), content: Text('$studentName ํ•™์ƒ์˜ ์Šค๋งˆํŠธํฐ ๊ธฐ๊ธฐ ๋“ฑ๋ก๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ(1234)๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?'), actions: [ @@ -305,8 +306,8 @@ class _TeacherStudentManagementPageState ), ElevatedButton( style: ElevatedButton.styleFrom( - backgroundColor: Colors.purple, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, ), onPressed: () async { Navigator.pop(ctx); @@ -373,7 +374,7 @@ class _TeacherStudentManagementPageState } // ๐Ÿท๏ธ ์„น์…˜ ์ œ๋ชฉ (์ƒ‰ ์ธ๋””์ผ€์ดํ„ฐ ๋ฐ” + ํ…์ŠคํŠธ). - Widget _sectionTitle(String text, {Color color = Colors.orange}) { + Widget _sectionTitle(String text, {Color color = AppPalette.ink}) { return Row( children: [ Container( @@ -400,8 +401,9 @@ class _TeacherStudentManagementPageState return Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( - color: Colors.white, + color: AppPalette.paper, borderRadius: BorderRadius.circular(24), + border: Border.all(color: AppPalette.sage), boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: 0.04), @@ -458,8 +460,8 @@ class _TeacherStudentManagementPageState child: ElevatedButton( onPressed: _controller.isWorking ? null : _addStudentAccount, style: ElevatedButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, padding: EdgeInsets.zero, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), @@ -519,10 +521,10 @@ class _TeacherStudentManagementPageState height: double.infinity, padding: const EdgeInsets.all(20), decoration: BoxDecoration( - color: _isDragging ? Colors.orange[50] : Colors.white, + color: _isDragging ? Colors.orange[50] : AppPalette.paper, borderRadius: BorderRadius.circular(24), border: Border.all( - color: _isDragging ? Colors.orange : Colors.grey.shade300, + color: _isDragging ? Colors.orange : AppPalette.sage, width: _isDragging ? 2 : 1, ), ), @@ -532,7 +534,7 @@ class _TeacherStudentManagementPageState Icon( Icons.upload_file_rounded, size: 40, - color: _isDragging ? Colors.orange : Colors.grey[400], + color: _isDragging ? Colors.orange : AppPalette.sage, ), const SizedBox(height: 12), Text( @@ -540,7 +542,7 @@ class _TeacherStudentManagementPageState textAlign: TextAlign.center, style: TextStyle( fontWeight: FontWeight.bold, - color: _isDragging ? Colors.orange[800] : Colors.black87, + color: _isDragging ? Colors.orange[800] : AppPalette.ink, ), ), const SizedBox(height: 4), @@ -566,8 +568,9 @@ class _TeacherStudentManagementPageState return Container( padding: const EdgeInsets.all(14), decoration: BoxDecoration( - color: Colors.white, + color: AppPalette.paper, borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppPalette.sage), boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: 0.03), @@ -583,15 +586,15 @@ class _TeacherStudentManagementPageState Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( - color: (needsReset ? Colors.red : Colors.blue).withValues( - alpha: 0.1, - ), + color: needsReset + ? Colors.red.withValues(alpha: 0.1) + : AppPalette.linen, shape: BoxShape.circle, ), child: Icon( needsReset ? Icons.lock_reset : Icons.person, size: 18, - color: needsReset ? Colors.red : Colors.blue, + color: needsReset ? Colors.red : AppPalette.ink, ), ), const SizedBox(height: 8), @@ -638,7 +641,7 @@ class _TeacherStudentManagementPageState IconButton( icon: const Icon( Icons.lock_reset, - color: Colors.purple, + color: AppPalette.ink, size: 18, ), tooltip: '๊ธฐ๊ธฐ ๋ฆฌ์…‹', @@ -670,14 +673,14 @@ class _TeacherStudentManagementPageState listenable: _controller, builder: (context, _) { return Scaffold( - backgroundColor: Colors.grey[100], + backgroundColor: AppPalette.mist, appBar: AppBar( title: const Text( 'โš™๏ธ ํ•™์ƒ ํ†ตํ•ฉ ๊ด€๋ฆฌ ์„ผํ„ฐ', style: TextStyle(fontWeight: FontWeight.bold), ), - backgroundColor: Colors.orange, - foregroundColor: Colors.white, + backgroundColor: AppPalette.ink, + foregroundColor: AppPalette.paper, elevation: 0, ), body: SingleChildScrollView( @@ -748,7 +751,7 @@ class _TeacherStudentManagementPageState children: [ Row( children: [ - _sectionTitle('์ „์ฒด ํ•™์ƒ ๋ชฉ๋ก', color: Colors.blue), + _sectionTitle('์ „์ฒด ํ•™์ƒ ๋ชฉ๋ก'), const Spacer(), IconButton( icon: const Icon(Icons.refresh_rounded),