프로필 타일에 편집 버튼 추가 - 프로필 커스텀 화면으로 이동

메인 대시보드 프로필 카드 오른쪽 위에 작은 편집(연필) 버튼을 달아서
누르면 새로 만든 빈 커스텀 화면(ProfileCustomizeScreen)으로 이동한다.
아직은 자리만 잡아둔 화면이고, 실제 커스텀 기능들은 이후에 하나씩 추가.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 05:53:01 +00:00
co-authored by Claude Sonnet 5
parent 0055b3d40b
commit ae3a3f18ea
2 changed files with 150 additions and 61 deletions
+94 -61
View File
@@ -24,6 +24,7 @@ import 'launchpad_transition.dart';
import 'login_screen.dart'; import 'login_screen.dart';
import 'nfc_poccket_checkin_screen.dart'; import 'nfc_poccket_checkin_screen.dart';
import 'nfc_tag_writer_screen.dart'; import 'nfc_tag_writer_screen.dart';
import 'profile_customize_screen.dart';
import 'study_calendar_screen.dart'; import 'study_calendar_screen.dart';
import 'study_timer_screen.dart'; import 'study_timer_screen.dart';
import 'teacher_attendance_page.dart'; import 'teacher_attendance_page.dart';
@@ -632,72 +633,104 @@ class _MainDashboardState extends State<MainDashboard> {
// 🪪 작은 프로필 카드로 배치 — 화면 전체를 차지하던 배너 대신 // 🪪 작은 프로필 카드로 배치 — 화면 전체를 차지하던 배너 대신
// 가운데에 떠 있는 카드 하나만 둔다. // 가운데에 떠 있는 카드 하나만 둔다.
Center( Center(
child: Container( child: Stack(
padding: const EdgeInsets.symmetric( clipBehavior: Clip.none,
horizontal: 28, children: [
vertical: 18, Container(
), padding: const EdgeInsets.symmetric(
decoration: BoxDecoration( horizontal: 28,
color: theme.color, vertical: 18,
borderRadius: BorderRadius.circular(24),
boxShadow: [
BoxShadow(
color: theme.color.withValues(alpha: 0.25),
blurRadius: 16,
offset: const Offset(0, 6),
), ),
], decoration: BoxDecoration(
), color: theme.color,
child: Column( borderRadius: BorderRadius.circular(24),
mainAxisSize: MainAxisSize.min, boxShadow: [
children: [ BoxShadow(
Text( color: theme.color.withValues(alpha: 0.25),
theme.title, blurRadius: 16,
style: const TextStyle( offset: const Offset(0, 6),
fontWeight: FontWeight.bold, ),
letterSpacing: 1.2, ],
color: Colors.white,
fontSize: 13,
),
), ),
const SizedBox(height: 10), child: Column(
Container( mainAxisSize: MainAxisSize.min,
padding: const EdgeInsets.all(4), children: [
decoration: const BoxDecoration( Text(
color: Colors.white, theme.title,
shape: BoxShape.circle, style: const TextStyle(
), fontWeight: FontWeight.bold,
child: CircleAvatar( letterSpacing: 1.2,
radius: 22, color: Colors.white,
backgroundColor: AppPalette.linen, fontSize: 13,
child: Icon( ),
theme.icon, ),
size: 22, const SizedBox(height: 10),
color: theme.color, Container(
padding: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
child: CircleAvatar(
radius: 22,
backgroundColor: AppPalette.linen,
child: Icon(
theme.icon,
size: 22,
color: theme.color,
),
),
),
const SizedBox(height: 10),
Text(
'$_displayName 님',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
const SizedBox(height: 3),
Text(
theme.subtitle,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white.withValues(alpha: 0.8),
fontSize: 12,
),
),
],
),
),
Positioned(
top: -6,
right: -6,
child: Material(
color: AppPalette.paper,
shape: const CircleBorder(),
elevation: 2,
child: InkWell(
customBorder: const CircleBorder(),
onTap: () => pushLaunchpad(
context,
(context) => ProfileCustomizeScreen(
studentId: _displayId,
studentName: _displayName,
),
),
child: const Padding(
padding: EdgeInsets.all(8),
child: Icon(
Icons.edit_rounded,
size: 16,
color: AppPalette.ink,
),
), ),
), ),
), ),
const SizedBox(height: 10), ),
Text( ],
'$_displayName 님',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
const SizedBox(height: 3),
Text(
theme.subtitle,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white.withValues(alpha: 0.8),
fontSize: 12,
),
),
],
),
), ),
), ),
const SizedBox(height: 28), const SizedBox(height: 28),
+56
View File
@@ -0,0 +1,56 @@
// 🎨 프로필 커스텀 화면 (UI 전용). 아직은 자리만 잡아둔 빈 화면 - 프로필 꾸미기
// 관련 기능들이 여기에 하나씩 추가될 예정이다.
import 'package:flutter/material.dart';
import '../theme/app_palette.dart';
import 'title_pill.dart';
class ProfileCustomizeScreen extends StatelessWidget {
final String studentId;
final String studentName;
const ProfileCustomizeScreen({
super.key,
required this.studentId,
required this.studentName,
});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppPalette.mist,
appBar: AppBar(
backgroundColor: Colors.transparent,
foregroundColor: AppPalette.ink,
elevation: 0,
centerTitle: true,
title: const TitlePill('프로필 꾸미기'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(
Icons.auto_awesome_rounded,
size: 48,
color: AppPalette.ink,
),
const SizedBox(height: 16),
const Text(
'곧 다양한 프로필 커스텀 기능이 추가될 예정이에요.',
textAlign: TextAlign.center,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
),
const SizedBox(height: 6),
Text(
'$studentName ($studentId)',
style: const TextStyle(color: Colors.grey),
),
],
),
),
),
);
}
}