Lewati ke konten utama

Doc 08 — Flutter Handoff Map

Purpose: Mapping table dari Figma screen → Flutter route → widget class. Setiap screen di Figma design system punya satu baris di tabel ini. Flutter developer pakai ini sebagai lookup utama saat build setiap layar.

Source of truth: Figma file ewO52a416uhcdn3Vgm6tbv (key). Prototype punya 315 reactions yang sudah wired (lihat Doc 09 untuk detail routing).

Convention:

  • Primary screens punya BottomNav dan ada di ShellRoute per persona.
  • Secondary screens (detail, form, flow) menggunakan push route (tanpa shell).
  • Route parameter pakai :id, :invoiceId, dll.
  • Widget class naming: <ScreenName>Page untuk full-screen, <WidgetName> untuk shared.

Master index

PersonaJumlah screenPrimary tabsRoute prefix
Shared (auth, states)8/
Parent (Orang Tua)306/parent/*
Guru (Teacher)105/guru/*
Wali Kelas165/wali-kelas/*
Bendahara175/bendahara/*
Kepala Sekolah84/kepsek/*
Admin Lembaga125/admin/*
TOTAL ACTIVE101

Total 106 screens di Figma, 11 adalah Archive / flow diagram / onboarding extras yang tidak perlu di-Flutter-kan.


Section 1 — Shared (auth, entry points, error states)

Figma IDScreenRouteWidget classNavigatorNotes
38:2Parent Splash/splashSplashPagerootAuto-navigate ke /onboarding/1 setelah 1.5s dengan Timer. Show logo + tagline.
38:15Onboarding Welcome/onboarding/1OnboardingWelcomePagerootSkip button → /login
38:27Onboarding Fitur/onboarding/2OnboardingFiturPagerootAnimated carousel optional
38:53Onboarding Mulai/onboarding/3OnboardingMulaiPageroot"Mulai" button → /login
9:2Login/loginLoginPagerootForm field username + password, backend call → store JWT in secure storage, redirect based on user.role. Semua error handling wajib.
38:64Forgot Password/forgot-passwordForgotPasswordPagerootEmail input → POST /api/auth/forgot-password
102:17Login Staff (Shared)/login/staffLoginStaffPagerootNOTE: Node 102:17 currently missing in Figma (detected during prototype audit). Rebuild with same shape as 9:2 tapi role picker: Guru/WK/Bendahara/Kepsek/Admin.
102:54Forgot Password (Shared Staff)/forgot-password/staffForgotPasswordStaffPagerootSame shape as 38:64
104:3404 Not Found/404NotFoundPagerootFallback route untuk go_router errorBuilder
104:26No InternetNoInternetPageoverlayBukan route — widget yang tampil saat connectivity check gagal. Pakai connectivity_plus stream.
104:50Search PatternSearchPage<T>genericTemplate untuk search di setiap persona
315:152Edit Profil (Shared)/profile/editEditProfilePageauthenticated rootWorks for all roles
315:176Ganti Password (Shared)/profile/change-passwordChangePasswordPageauthenticated rootWorks for all roles

Section 2 — Parent (Orang Tua)

2A — Primary (ShellRoute dengan 6-tab BottomNav)

Figma IDScreenRouteWidget classBottomNav index
25:2Dashboard (Polished)/parent/dashboardParentDashboardPage0
22:2Tagihan (Polished)/parent/billingParentBillingListPage1
23:2Tabungan (Polished)/parent/savingsParentSavingsPage2
23:102Nilai (Polished)/parent/gradesParentGradesPage3
24:2Absensi (Polished)/parent/attendanceParentAttendancePage4
24:136Profil (Polished)/parent/profileParentProfilePage5

2B — Secondary (push routes, no shell)

Figma IDScreenRouteWidget classParent route
22:94Detail Invoice/parent/billing/:invoiceIdBillingDetailPage/parent/billing
26:2Payment — Transfer Bank/parent/billing/:invoiceId/pay/transferPaymentTransferPage/parent/billing/:invoiceId
26:55Payment — Virtual Account/parent/billing/:invoiceId/pay/vaPaymentVirtualAccountPage/parent/billing/:invoiceId
26:100Payment — QRIS/parent/billing/:invoiceId/pay/qrisPaymentQrisPage/parent/billing/:invoiceId
26:128Payment — Sukses/parent/billing/:invoiceId/pay/successPaymentSuccessPageend of payment flow, back → /parent/dashboard
28:2Tabungan — Setor/parent/savings/depositSavingsDepositPage/parent/savings
28:33Tabungan — Atur Uang Saku/parent/savings/allowanceSavingsAllowancePage/parent/savings
28:73Edit Profil (Parent-specific)/parent/profile/editParentEditProfilePage/parent/profile — OR use shared EditProfilePage
28:108Ganti Password (Parent)/parent/profile/change-password— use shared
28:141Pengaturan Notifikasi/parent/profile/notificationsNotificationSettingsPage/parent/profile
32:2Hafalan Progress/parent/hafalanHafalanProgressPage/parent/dashboard (dari Quick Action)
32:99Pengumuman/parent/announcementsAnnouncementListPage/parent/dashboard
32:188Perizinan/parent/permissionsPermissionListPage/parent/dashboard
181:2Perizinan Detail/parent/permissions/:idPermissionDetailPage/parent/permissions
34:2Rapor Digital/parent/report-cardReportCardPage/parent/grades or Quick Action
34:55Jadwal Pelajaran/parent/scheduleParentSchedulePageQuick Action
34:133Chat Wali Kelas/parent/chatChatWaliKelasPageFAB on dashboard
185:2Subject Detail/parent/grades/:subjectIdSubjectDetailPage/parent/grades
187:9Setoran Detail/parent/hafalan/:setoranIdSetoranDetailPage/parent/hafalan
188:20Sesi Detail/parent/schedule/:sessionIdScheduleSessionDetailPage/parent/schedule
189:31Pengumuman Detail/parent/announcements/:idAnnouncementDetailPage/parent/announcements
190:17Wali Kelas Profile/parent/wali-kelas/:idWaliKelasProfilePage/parent/chat header
39:113Multi-Child SwitcherChildSwitcherBottomSheetoverlay modal on dashboard
39:164Notifikasi Center/parent/notificationsNotificationsPageheader bell icon

2C — Empty / error states (tidak perlu route tersendiri)

Figma IDScreenFlutter handling
39:2State — Tagihan KosongBillingListPage render EmptyState(icon, title, subtitle) widget ketika invoices.isEmpty
39:32State — Nilai KosongSame pattern di GradesPage
39:62State — OfflineDitangani global via ConnectivityListener widget
39:99State — Server ErrorErrorBoundary widget, retry button

2D — Deprecated / Archive (SKIP di Flutter)

  • 38:2 Splash Screen 2 (47:2) — duplikat, pakai 38:2 saja
  • 30:2 Parent Dashboard v1 — archived pre-polish
  • 30:118 Parent Tagihan (Dark Mode) — hanya showcase, Dark mode di-handle otomatis via ThemeMode.system

Section 3 — Guru (Teacher)

3A — Primary (ShellRoute, 5-tab BottomNav)

Figma IDScreenRouteWidget classBottomNav index
288:2Dashboard/guru/dashboardGuruDashboardPage0
289:2Kehadiran (QR Scanner)/guru/attendanceGuruAttendanceScannerPage1
289:49Input Nilai — Kelas/guru/gradesGuruGradeInputClassListPage2
293:2Jadwal/guru/scheduleGuruSchedulePage3
289:124Profil/guru/profileGuruProfilePage4

3B — Secondary

Figma IDScreenRouteWidget class
293:75Student Detail/guru/students/:studentIdStudentDetailPage
293:136Kirim Pengumuman/guru/announcements/newSendAnnouncementPage
63:94Input Nilai — Bulk Entry/guru/grades/:classId/bulkBulkGradeInputPage
64:238Input Hafalan/guru/hafalan/inputHafalanInputPage
116:2Absensi Manual/guru/attendance/manual/:classIdAttendanceManualPage
64:101Daftar Siswa Kelas/guru/classes/:classId/studentsClassStudentListPage
121:2Kelas Saya/guru/classesGuruClassListPage
121:94Riwayat Mengajar/guru/historyGuruTeachingHistoryPage
387:2Presensi Hari Ini (staff self-attendance)/guru/presensiGuruPresensiHariIniPage
388:2Riwayat Presensi (staff monthly history)/guru/presensi/historyGuruRiwayatPresensiPage
389:2Pengajuan Izin (staff leave request)/guru/presensi/izinGuruPengajuanIzinPage

3D — Staff Self-Attendance Widget

Guru Profil (289:124) has a restored KehadiranHariIni widget (node 392:2) showing:

  • Today's clock-in time, clock-out time
  • On Time / Terlambat / Belum Clock In status badge
  • "Clock Out →" shortcut button
  • Monthly summary row (Hadir / Terlambat / Izin counts)

Tapping the widget navigates to /guru/presensi (GuruPresensiHariIniPage).

3C — Legacy (old Sprint 1 versions — SKIP)

  • 59:2, 59:114, 63:2, 63:285 — pre-rebuild, use 288 series only
  • 64:3 (Wali Kelas Dashboard from Guru page) — belongs to Wali Kelas persona

Section 4 — Wali Kelas (Homeroom Teacher)

4A — Primary (ShellRoute, 5-tab BottomNav)

Figma IDScreenRouteWidget classTab
291:2Dashboard/wali-kelas/dashboardWaliKelasDashboardPage0
292:2Kelas — Daftar Santri/wali-kelas/studentsClassStudentListPage1
292:105Nilai — Kelas Overview/wali-kelas/gradesWaliKelasGradesOverviewPage2
292:191Absensi — Overview/wali-kelas/attendanceWaliKelasAttendanceOverviewPage3
70:318Profil (Original designer version)/wali-kelas/profileWaliKelasProfilePage4

4B — Secondary

Figma IDScreenRouteWidget class
295:2Detail Santri/wali-kelas/students/:studentIdWaliKelasStudentDetailPage
295:56Perizinan Approval/wali-kelas/permissions/:id/reviewPermissionApprovalPage
295:136Pengumuman Composer/wali-kelas/announcements/newAnnouncementComposerPage
315:93Rapor Generate/wali-kelas/report-cards/generateReportCardGeneratorPage
316:2Preview Rapor/wali-kelas/report-cards/:id/previewReportCardPreviewPage
320:2Rekap Kehadiran/wali-kelas/attendance/recapAttendanceRecapPage
320:92Rekap Nilai/wali-kelas/grades/recapGradesRecapPage
320:170Rapor Management/wali-kelas/report-cardsReportCardManagementPage
391:2Presensi Hari Ini (staff self-attendance)/wali-kelas/presensiWaliKelasPresensiHariIniPage
391:53Riwayat Presensi (staff monthly history)/wali-kelas/presensi/historyWaliKelasRiwayatPresensiPage
391:104Pengajuan Izin (staff leave request)/wali-kelas/presensi/izinWaliKelasPengajuanIzinPage

Wali Kelas Profil (70:318) already contains a visible "Kehadiran Hari Ini" section (preserved from designer's original). Its card container is wired to /wali-kelas/presensi, and the "Rekap Kehadiran" link is wired to /wali-kelas/presensi/history.


Section 5 — Bendahara (Treasurer)

5A — Primary (ShellRoute, 5-tab BottomNav)

Figma IDScreenRouteWidget classTab
300:2Dashboard/bendahara/dashboardBendaharaDashboardPage0
300:95Bayar (terima pembayaran)/bendahara/paymentsBendaharaPaymentsPage1
301:2Jurnal/bendahara/journalBendaharaJournalPage2
301:80Laporan/bendahara/reportsBendaharaReportsPage3
77:214Profil (Original designer version)/bendahara/profileBendaharaProfilePage4

5B — Secondary

Figma IDScreenRouteWidget class
77:3Laporan SPP/bendahara/reports/sppSppReportPage
77:109Tunggakan Aging/bendahara/reports/agingAgingReportPage
315:2Kas Saya/bendahara/cashCashLedgerPage
315:37Riwayat Pembayaran/bendahara/payments/historyPaymentHistoryPage
75:2Terima Pembayaran/bendahara/payments/receiveReceivePaymentPage
75:73Daftar Tagihan/bendahara/invoicesInvoiceListPage
75:176Input Jurnal/bendahara/journal/newJournalEntryPage
337:2Verifikasi Pembayaran/bendahara/payments/verifyPaymentVerificationPage
337:82Setor ke Bank/bendahara/cash/deposit-bankBankDepositPage
337:110Buat Tagihan Massal/bendahara/invoices/bulk-createBulkInvoiceCreatePage
337:146Keringanan Biaya/bendahara/discountsFeeDiscountPage
337:204Pembayaran Pending/bendahara/payments/pendingPendingPaymentsPage

Section 6 — Kepala Sekolah (Principal)

6A — Primary (ShellRoute, 4-tab BottomNav)

Figma IDScreenRouteWidget classTab
306:2Executive Dashboard/kepsek/dashboardKepsekDashboardPage0
306:70Laporan Analytics/kepsek/reportsKepsekReportsPage1
306:150Keuangan Overview/kepsek/financeKepsekFinancePage2
339:52Manajemen Guru/kepsek/teachersTeacherManagementPage3 (label "Guru")
306:215Profil/kepsek/profileKepsekProfilePage4

NOTE: Bottom nav is actually 5-tab (Beranda / Laporan / Keuangan / Guru / Profil), bukan 4-tab yang di earlier docs disebut. Verified lewat prototype audit.

6B — Secondary

Figma IDScreenRouteWidget class
339:2Yayasan Dashboard/kepsek/yayasanYayasanDashboardPage
339:116Unit Pendidikan/kepsek/yayasan/unitsEducationUnitListPage
339:170Audit Trail/kepsek/auditAuditTrailPage

Section 7 — Admin Lembaga

7A — Primary (ShellRoute, 5-tab BottomNav)

Figma IDScreenRouteWidget classTab
86:3Dashboard/admin/dashboardAdminDashboardPage0
336:98Akademik/admin/academicAdminAcademicPage1 (label "Akademik")
86:327Keuangan Overview/admin/financeAdminFinancePage2 (label "Keuangan")
86:232Manajemen Guru/admin/hrAdminHRPage3 (label "SDM")
336:371Profil Menu/admin/menuAdminMenuPage4 (label "Menu")

NOTE: Tab labels adalah Beranda / Akademik / Keuangan / SDM / Menu (bukan Siswa/Guru/dll.). Verified saat prototype wiring di session ini.

7B — Secondary

Figma IDScreenRouteWidget class
86:116Manajemen Siswa/admin/studentsStudentManagementPage
336:187Manajemen Kelas/admin/classesClassManagementPage
336:271Settings/admin/settingsAdminSettingsPage
340:2Detail Mata Pelajaran/admin/subjects/:idSubjectDetailPage
340:48Jadwal Mengajar/admin/teaching-scheduleTeachingScheduleManagementPage
340:105Template Rapor/admin/report-templatesReportTemplateListPage
340:166Kalender Akademik/admin/academic-calendarAcademicCalendarPage

Cross-references

  • Route specification + transitions → Doc 09 (09-route-specification.md)
  • Shared widgets (BottomNav, HeroCard, QuickActionCard, etc.) → Doc 10 (10-widget-component-spec.md)
  • Color/spacing/typography tokensflutter-starter/lib/core/theme/
  • Naming conventions → Doc 06 (06-naming-convention-guide.md)
  • Dark mode behavior → Doc 05 (05-dark-mode-pairing-guide.md)
  • Accessibility requirements → Doc 04 (04-accessibility-audit-report.md)

Change log

  • v1.0 (hari ini) — Initial extraction dari Figma prototype post-Sprint 4 + post-prototype-wiring. Covers 95 active screens across 6 personas + 8 shared.