학생 목록 타일 크기 약 1/4로 축소

타일이 너무 크다는 피드백에 따라 crossAxisCount를 늘리고(8/4)
아바타, 폰트, 버튼 크기를 전반적으로 줄여 훨씬 컴팩트한 타일로 변경.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-01 00:34:06 +09:00
co-authored by Claude Sonnet 5
parent 5b3eb2fcf8
commit 517aa791b5
+26 -23
View File
@@ -545,15 +545,12 @@ class _TeacherStudentManagementPageState
final bool needsReset = student['device'] == '초기화 필요'; final bool needsReset = student['device'] == '초기화 필요';
return Container( return Container(
padding: const EdgeInsets.all(14), padding: const EdgeInsets.all(8),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(14),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(color: Colors.black.withValues(alpha: 0.04), blurRadius: 8),
color: Colors.black.withValues(alpha: 0.04),
blurRadius: 12,
),
], ],
), ),
child: Column( child: Column(
@@ -561,43 +558,47 @@ class _TeacherStudentManagementPageState
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
CircleAvatar( CircleAvatar(
radius: 24, radius: 14,
backgroundColor: needsReset ? Colors.red[50] : Colors.blue[50], backgroundColor: needsReset ? Colors.red[50] : Colors.blue[50],
child: Icon( child: Icon(
needsReset ? Icons.lock_reset : Icons.person, needsReset ? Icons.lock_reset : Icons.person,
size: 14,
color: needsReset ? Colors.red : Colors.blue, color: needsReset ? Colors.red : Colors.blue,
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 4),
Text( Text(
'$studentName ($studentId)', '$studentName ($studentId)',
textAlign: TextAlign.center, textAlign: TextAlign.center,
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 13), style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 10),
), ),
const SizedBox(height: 4), const SizedBox(height: 1),
Text( Text(
needsReset ? '초기화 대기중' : '정상 등록', needsReset ? '초기화 대기중' : '정상 등록',
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 11, fontSize: 8,
color: needsReset ? Colors.red : Colors.grey, color: needsReset ? Colors.red : Colors.grey,
fontWeight: needsReset ? FontWeight.bold : FontWeight.normal, fontWeight: needsReset ? FontWeight.bold : FontWeight.normal,
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 4),
Wrap( Wrap(
alignment: WrapAlignment.center, alignment: WrapAlignment.center,
spacing: 2, spacing: 0,
runSpacing: 2, runSpacing: 0,
children: [ children: [
Builder( Builder(
builder: (chipContext) => ActionChip( builder: (chipContext) => ActionChip(
visualDensity: VisualDensity.compact, visualDensity: VisualDensity.compact,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
padding: EdgeInsets.zero,
labelPadding: const EdgeInsets.symmetric(horizontal: 4),
label: Text( label: Text(
grade != null ? '$grade학년' : '미배정', grade != null ? '$grade학년' : '미배정',
style: const TextStyle(fontSize: 11), style: const TextStyle(fontSize: 8),
), ),
onPressed: () => _showGradeMenu( onPressed: () => _showGradeMenu(
chipContext, chipContext,
@@ -608,23 +609,25 @@ class _TeacherStudentManagementPageState
), ),
), ),
IconButton( IconButton(
visualDensity: VisualDensity.compact,
icon: const Icon( icon: const Icon(
Icons.lock_reset, Icons.lock_reset,
color: Colors.purple, color: Colors.purple,
size: 20, size: 14,
), ),
tooltip: '기기 리셋', tooltip: '기기 리셋',
padding: EdgeInsets.zero,
constraints: const BoxConstraints(minWidth: 22, minHeight: 22),
onPressed: () => _confirmResetDevice(studentId, studentName), onPressed: () => _confirmResetDevice(studentId, studentName),
), ),
IconButton( IconButton(
visualDensity: VisualDensity.compact,
icon: const Icon( icon: const Icon(
Icons.delete_forever_rounded, Icons.delete_forever_rounded,
color: Colors.redAccent, color: Colors.redAccent,
size: 20, size: 14,
), ),
tooltip: '계정 영구 삭제', tooltip: '계정 영구 삭제',
padding: EdgeInsets.zero,
constraints: const BoxConstraints(minWidth: 22, minHeight: 22),
onPressed: () => _confirmDeleteStudent(studentId, studentName), onPressed: () => _confirmDeleteStudent(studentId, studentName),
), ),
], ],
@@ -759,10 +762,10 @@ class _TeacherStudentManagementPageState
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
gridDelegate: gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount( SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isWide ? 4 : 2, crossAxisCount: isWide ? 8 : 4,
crossAxisSpacing: 16, crossAxisSpacing: 10,
mainAxisSpacing: 16, mainAxisSpacing: 10,
childAspectRatio: isWide ? 1.5 : 0.75, childAspectRatio: isWide ? 1.4 : 0.9,
), ),
itemCount: _controller.students.length, itemCount: _controller.students.length,
itemBuilder: (context, index) => itemBuilder: (context, index) =>