diff --git a/lib/ui/teacher_student_management_page.dart b/lib/ui/teacher_student_management_page.dart index 034d7f0..e99a69c 100644 --- a/lib/ui/teacher_student_management_page.dart +++ b/lib/ui/teacher_student_management_page.dart @@ -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) =>