학생 목록 타일 크기 약 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'] == '초기화 필요';
return Container(
padding: const EdgeInsets.all(14),
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
borderRadius: BorderRadius.circular(14),
boxShadow: [
BoxShadow(
color: Colors.black.withValues(alpha: 0.04),
blurRadius: 12,
),
BoxShadow(color: Colors.black.withValues(alpha: 0.04), blurRadius: 8),
],
),
child: Column(
@@ -561,43 +558,47 @@ class _TeacherStudentManagementPageState
crossAxisAlignment: CrossAxisAlignment.center,
children: [
CircleAvatar(
radius: 24,
radius: 14,
backgroundColor: needsReset ? Colors.red[50] : Colors.blue[50],
child: Icon(
needsReset ? Icons.lock_reset : Icons.person,
size: 14,
color: needsReset ? Colors.red : Colors.blue,
),
),
const SizedBox(height: 10),
const SizedBox(height: 4),
Text(
'$studentName ($studentId)',
textAlign: TextAlign.center,
maxLines: 1,
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(
needsReset ? '초기화 대기중' : '정상 등록',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 11,
fontSize: 8,
color: needsReset ? Colors.red : Colors.grey,
fontWeight: needsReset ? FontWeight.bold : FontWeight.normal,
),
),
const SizedBox(height: 10),
const SizedBox(height: 4),
Wrap(
alignment: WrapAlignment.center,
spacing: 2,
runSpacing: 2,
spacing: 0,
runSpacing: 0,
children: [
Builder(
builder: (chipContext) => ActionChip(
visualDensity: VisualDensity.compact,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
padding: EdgeInsets.zero,
labelPadding: const EdgeInsets.symmetric(horizontal: 4),
label: Text(
grade != null ? '$grade학년' : '미배정',
style: const TextStyle(fontSize: 11),
style: const TextStyle(fontSize: 8),
),
onPressed: () => _showGradeMenu(
chipContext,
@@ -608,23 +609,25 @@ class _TeacherStudentManagementPageState
),
),
IconButton(
visualDensity: VisualDensity.compact,
icon: const Icon(
Icons.lock_reset,
color: Colors.purple,
size: 20,
size: 14,
),
tooltip: '기기 리셋',
padding: EdgeInsets.zero,
constraints: const BoxConstraints(minWidth: 22, minHeight: 22),
onPressed: () => _confirmResetDevice(studentId, studentName),
),
IconButton(
visualDensity: VisualDensity.compact,
icon: const Icon(
Icons.delete_forever_rounded,
color: Colors.redAccent,
size: 20,
size: 14,
),
tooltip: '계정 영구 삭제',
padding: EdgeInsets.zero,
constraints: const BoxConstraints(minWidth: 22, minHeight: 22),
onPressed: () => _confirmDeleteStudent(studentId, studentName),
),
],
@@ -759,10 +762,10 @@ class _TeacherStudentManagementPageState
physics: const NeverScrollableScrollPhysics(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isWide ? 4 : 2,
crossAxisSpacing: 16,
mainAxisSpacing: 16,
childAspectRatio: isWide ? 1.5 : 0.75,
crossAxisCount: isWide ? 8 : 4,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: isWide ? 1.4 : 0.9,
),
itemCount: _controller.students.length,
itemBuilder: (context, index) =>