A comprehensive Flutter-based academic management application designed to help students organize their classes, assignments, exams, and track attendance efficiently.
- Redesigned Splash Screen: Enlarged logo with improved visual hierarchy and normalized "ClassFlow" typography for better visual consistency
- Responsive Layout: All screens optimized for various device sizes
- Smooth Animations: Polished transitions and loading states throughout the app
- Unified Event System: Manage classes, exams, assignments, meetings, and personal events in one place
- Timetable Management: Create recurring class schedules with automatic event generation
- Attendance Tracking: Mark and monitor attendance for all classes with detailed statistics
- Calendar View: Visual calendar with event overview and daily planning
- Timeline View: Hour-by-hour breakdown of your day with event details
- Voice Notes: Record and attach voice notes to any event
- Smart Reminders: Set custom reminders for events and deadlines
- Dark Mode: Full dark mode support with theme persistence
- Multiple event classifications (Class, Exam, Assignment, Meeting, Personal, Other)
- Priority levels (Low, Medium, High, Critical)
- Categories/subjects for organization
- Completion tracking with visual indicators
- Event duplication and bulk management
- Important event flagging
- Five attendance statuses (Present, Absent, Late, Excused, Cancelled)
- Automatic attendance statistics calculation
- Per-class attendance tracking
- Visual attendance rate indicators
- Integration with timetable entries
Before running this project, ensure you have the following installed:
- Flutter SDK (3.0.0 or higher)
- Dart SDK (3.0.0 or higher)
- Android Studio / Xcode (for mobile development)
- A code editor (VS Code, Android Studio, or IntelliJ IDEA)
lib/
├── main.dart # App entry point
├── assets/ # Image assets (logo, icons)
├── backend/
│ ├── data_provider.dart # Central state management (all CRUD operations)
│ ├── models.dart # Event model with all properties
│ ├── timetable_models.dart # TimetableEntry and related models
│ └── notification_service.dart # Notification and reminder handling
└── frontend/
├── splash_screen.dart # App entry animation and branding
├── home_page.dart # Main dashboard
├── attendance_page.dart # Attendance tracking interface
├── [other UI screens].dart # Feature-specific screens
test/
├── widget_test.dart # 26 comprehensive functional tests
app_testing_report.md # Detailed test results and feature verification
flutter pub getflutter doctorEnsure all required components are installed and configured correctly.
- Start an Android emulator or connect an Android device via USB
- Run the following command:
flutter run- Start an iOS simulator or connect an iOS device
- Run the following command:
flutter runflutter run -d chromeflutter build apk --releaseflutter build appbundle --releaseflutter build ios --releaseprovider: ^6.1.1- State managementshared_preferences: ^2.2.2- Local data persistenceintl: ^0.19.0- Internationalization and date formatting
table_calendar: ^3.0.9- Calendar widgetgoogle_fonts: ^6.1.0- Custom fontsflutter_slidable: ^3.0.1- Swipe actions
record: ^5.0.4- Audio recordingaudioplayers: ^5.2.1- Audio playbackpath_provider: ^2.1.2- File system access
flutter_local_notifications: ^16.3.0- Local notificationspermission_handler: ^11.2.0- Runtime permissionstimezone: ^0.9.2- Timezone handling
uuid: ^4.3.3- Unique ID generation
-
Update
android/app/build.gradle:- Minimum SDK version: 21 or higher
- Compile SDK version: 34 or higher
-
Add permissions in
android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>-
Update
ios/Podfile:- Uncomment
platform :ios, '12.0'and set to 12.0 or higher
- Uncomment
-
Add permissions in
ios/Runner/Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>This app needs microphone access to record voice notes</string>
<key>NSUserNotificationsUsageDescription</key>
<string>This app needs notification access to remind you of events</string>The app uses SharedPreferences for local data storage. All data is stored on the device and persists between app sessions.
- Events and tasks
- Timetable entries
- Attendance records
- Categories
- User preferences (theme, authentication status)
- Voice note file paths
- Android:
/data/data/<package-name>/shared_prefs/ - iOS:
Library/Preferences/ - Voice recordings: Application documents directory
1. Access the Data Layer:
import 'package:classflow/backend/data_provider.dart';
final provider = DataProvider();
await provider.ready; // Wait for SharedPreferences to load
// Now you can use provider to access/modify data:
provider.addEvent(event);
provider.addTimetableEntry(timetable);
provider.markAttendance(record);
provider.notifyListeners(); // Notify UI of changes2. Available Methods by Module:
Timetable Management:
provider.addTimetableEntry(entry); // Create new course schedule
provider.updateTimetableEntry(entry); // Update existing schedule
provider.deleteTimetableEntry(entryId); // Delete and cascade
provider.timetableEntries // Get all timetable entriesEvent Management:
provider.addEvent(event); // Create event
provider.updateEvent(event); // Update event
provider.deleteEvent(eventId); // Delete event
provider.getEventsForDay(date); // Get events for specific day
provider.toggleEventComplete(eventId); // Mark as done/undo
provider.events // Get all eventsAttendance Tracking:
provider.markAttendance(record); // Record attendance
provider.deleteAttendanceRecord(recordId); // Remove record
provider.getAttendanceStats(courseName); // Get statistics for course
provider.getAllAttendanceStats(); // Get all course stats
provider.attendanceRecords // Get all recordsEvent Notes:
provider.addVoiceNoteToEvent(eventId, note); // Attach voice note
// Access via: event.voiceNotes and event.notes- Tap the floating action button on any screen
- Select event classification (Class, Assignment, Exam, etc.)
- Fill in required details (title, date/time)
- Optionally add: category, location, notes, priority, reminders
- Save the event
- Navigate to Timetable from the home page quick actions
- Tap "Add Class" button
- Enter class details:
- Course name and code
- Instructor and room
- Days of week (select multiple)
- Start time and duration
- Semester start/end dates
- The system automatically generates recurring class events
- Open the Attendance page from home or timetable
- Select a class to view details
- Mark attendance for each class session:
- Present
- Absent
- Late
- Excused
- Cancelled (not counted in statistics)
- View attendance statistics and percentage
- While creating/editing an event, go to the "Notes" tab
- Tap "Record" button
- Record your voice note
- Add optional tags for organization
- Save the voice note (attached to the event)
- Edit an event
- Go to "Advanced" tab
- Tap "Add Reminder"
- Select date and time for the reminder
- Multiple reminders can be added per event
- Clean the build:
flutter clean
flutter pub get- Check Flutter installation:
flutter doctor -v- Ensure permissions are granted in device settings
- Check notification channel settings
- Verify
flutter_local_notificationsis properly configured
- Grant microphone permissions in device settings
- Test on physical device (emulators may have issues)
- Verify
recordpackage compatibility with your OS version
- Data is stored locally; uninstalling the app deletes all data
- Sign out functionality clears all data
- No cloud backup is currently implemented
- No cloud synchronization (data is local only)
- No multi-device support
- Voice notes stored locally (not backed up)
- Calendar does not sync with external calendars
- No export/import functionality for data
- Events are loaded on-demand
- Timetable generation is optimized for large date ranges
- Images and voice notes use compressed formats
- Efficient state management with Provider
The project includes a comprehensive test suite covering all major modules.
# Run all tests
flutter test
# Run specific test file
flutter test test/widget_test.dart
# Run with coverage
flutter test --coverageTest Coverage:
- ✓ Module 1: Courses and Timetable (4 tests) - Create, update, delete timetable entries; auto-generate events
- ✓ Module 2: Calendar and Schedule (5 tests) - Event CRUD, day filtering, completion tracking, deletion
- ✓ Module 3: Attendance Calculator & Risk Predictor (5 tests) - Mark attendance, calculate statistics, update/delete records
- ✓ Module 4: Notes and Voice Notes (3 tests) - Text notes, voice notes, multiple note management
- ✓ Module 5: Notification and Reminders (4 tests) - Create reminders, manage settings, retrieve active reminders, priority notifications
- ✓ Integration Tests (2 tests) - Full workflow testing, category filtering
- ✓ Summary Report (1 test) - Comprehensive test suite reporting
- Total: 24/24 tests passing ✓ (4+5+5+3+4+2+1)
Test Report: See app_testing_report.md for detailed test results (24/24 passing) and feature verification checklist.
flutter format .flutter analyze- Current Version: 2.0.0
- Minimum Flutter Version: 3.0.0
- Supported Platforms: Android, iOS