백품타에 친구/그룹 스터디/출석 달력 기능 추가

친구 신청·수락, 그룹 생성·초대(친구 목록에서 선택)·오늘 출석 현황
공유, 개인 연속 출석(스트릭) 달력, 관리자가 날짜별로 선물/이벤트를
등록하는 달력 관리 화면을 추가. 대시보드에 학생용 3개(친구/그룹
스터디/출석 달력) + 교사·관리자용 1개(출석 달력 관리) 타일을 배치.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 04:09:35 +00:00
co-authored by Claude Sonnet 5
parent bdc79b94c3
commit 8a9b414535
9 changed files with 1904 additions and 0 deletions
+62
View File
@@ -17,10 +17,13 @@ import 'board_report_screen.dart';
import 'dashboard_settings_page.dart';
import 'device_checkout_ledger_page.dart';
import 'device_checkout_request_screen.dart';
import 'friends_screen.dart';
import 'group_list_screen.dart';
import 'launchpad_transition.dart';
import 'login_screen.dart';
import 'nfc_poccket_checkin_screen.dart';
import 'nfc_tag_writer_screen.dart';
import 'study_calendar_screen.dart';
import 'study_timer_screen.dart';
import 'teacher_attendance_page.dart';
import 'teacher_call_screen.dart';
@@ -365,6 +368,49 @@ class _MainDashboardState extends State<MainDashboard> {
),
),
));
tiles.add((
id: 'friends',
child: _buildModernCard(
icon: Icons.people_alt_rounded,
title: '친구',
subtitle: '학번으로 친구 추가',
color: AppPalette.ink,
onTap: () => pushLaunchpad(
context,
(context) =>
FriendsScreen(studentId: _displayId, studentName: _displayName),
),
),
));
tiles.add((
id: 'group_study',
child: _buildModernCard(
icon: Icons.groups_rounded,
title: '그룹 스터디',
subtitle: '친구랑 그룹 만들어 같이 공부',
color: AppPalette.ink,
onTap: () => pushLaunchpad(
context,
(context) => GroupListScreen(
studentId: _displayId,
studentName: _displayName,
),
),
),
));
tiles.add((
id: 'study_calendar',
child: _buildModernCard(
icon: Icons.calendar_month_rounded,
title: '출석 달력',
subtitle: '연속 출석 기록 확인',
color: AppPalette.ink,
onTap: () => pushLaunchpad(
context,
(context) => StudyCalendarScreen(studentId: _displayId),
),
),
));
}
if (_isTeacherOrAbove) {
@@ -423,6 +469,22 @@ class _MainDashboardState extends State<MainDashboard> {
),
),
));
tiles.add((
id: 'study_calendar_admin',
child: _buildModernCard(
icon: Icons.event_available_rounded,
title: '출석 달력 관리',
subtitle: '날짜별 선물/이벤트 등록',
color: AppPalette.ink,
onTap: () => pushLaunchpad(
context,
(context) => StudyCalendarScreen(
studentId: _displayId,
canManageEvents: true,
),
),
),
));
tiles.add((
id: 'teacher_location',
child: _buildModernCard(