A comprehensive Flutter application for managing faculty schedules, class timetables, and administrative operations. This app provides role-based access for Super Admins, HODs (Heads of Department), Admins, and Faculty members.
- Overview
- Features
- Project Structure
- Prerequisites
- Getting Started
- Architecture
- Key Features by Role
- Database Schema
- Building & Deployment
- Troubleshooting
- Contributing
The Schedule application is a role-based timetable management system built with Flutter that enables institutions to efficiently manage faculty schedules, class availability, and department timetables. The app integrates with Firebase for real-time data synchronization and authentication.
App Name: Scheduler
Version: 1.0.0+1
Flutter SDK: ^3.9.2
Platform Support: iOS, Android, Web
- Role-Based Access Control: Super Admin, HOD, Admin, and Faculty roles
- Real-Time Data Sync: Cloud Firestore integration for instant updates
- Timetable Management: Create, view, and manage faculty schedules
- Class Availability Tracking: Track class timing and availability
- Request Management: Handle faculty requests with approval workflow
- Department Management: Manage department-level scheduling
- Status Tracking: Monitor scheduling status and conflicts
- Excel Import/Export: Import and export timetables in Excel format
- Notification System: Real-time notifications for approvals and changes
- User management and permission control
- Department and faculty management
- Timetable approval and validation
- Analytics and reporting
- View assigned schedules
- Request schedule changes
- Manage class availability
- View request status
- Download schedules
schedule/
βββ lib/
β βββ main.dart # App entry point
β βββ firebase_options.dart # Firebase configuration
β βββ initializations.dart # App initialization
β βββ imports.dart # Central imports file
β βββ .env # Environment variables
β β
β βββ controller/ # Business logic & state management
β β βββ auth/ # Authentication controller
β β βββ session/ # User session controller
β β βββ schedule/ # Schedule management controller
β β βββ requests/ # Request handling controller
β β βββ superadmin/ # Super admin operations
β β
β βββ pages/ # UI Pages
β β βββ splash_page.dart # App splash screen
β β βββ home.dart # Main home page with role-based navigation
β β βββ login/ # Login page and authentication
β β βββ profile/ # User profile management
β β βββ schedule/ # Schedule viewing and management
β β βββ manage_timetable/ # Timetable creation and editing
β β βββ requests/ # Request management interface
β β βββ status/ # Status tracking page
β β βββ superadmin/ # Super admin dashboard
β β
β βββ models/ # Data models
β β βββ faculty_model.dart
β β βββ class_timing_model.dart
β β βββ class_avalability_model.dart
β β βββ dept_availability_model.dart
β β βββ users_applied_model.dart
β β
β βββ services/ # Backend services
β β βββ firestore_service.dart
β β βββ session_service.dart
β β βββ error_handler.dart
β β
β βββ helper/ # Helper utilities
β βββ utils/ # Utility functions
β βββ widgets/ # Reusable UI components
β
βββ android/ # Android native code
βββ ios/ # iOS native code
βββ web/ # Web platform code
βββ assets/
β βββ icon.png
β βββ template.xlsx
βββ pubspec.yaml # Flutter dependencies
βββ firebase.json # Firebase config
Before you begin, ensure you have the following installed:
- Flutter SDK: Version 3.9.2 or higher
flutter --version
- Dart SDK: ^3.9.2 (comes with Flutter)
- Android Studio or Xcode for mobile development
- Firebase Account: For Firestore and authentication
- Git: For version control
- macOS 11+, Windows 10+, or Linux: For development machine
git clone <repository-url>
cd scheduleflutter pub getFollow the Firebase setup instructions in the Firebase Setup section.
Create a .env file in the lib/ directory with necessary variables.
# Run on default device/emulator
flutter run
# Run on specific device
flutter run -d <device-id>
# Run in debug mode with verbose logging
flutter run -v
# Run release build
flutter run --releaseThe app uses GetX (GetIt alternative) for state management, dependency injection, and navigation:
// Register controller
Get.put(SessionController());
// Access controller
final controller = Get.find<SessionController>();
// Navigation
Get.to(() => HomePage());- FirestoreService: Handles all Firestore CRUD operations
- SessionService: Manages user session and authentication state
- ErrorHandler: Centralized error handling and user feedback
UI (Pages) β Controllers (GetX) β Services (Firestore) β Firebase
β
Reactive Updates via RxDart
- Manage all faculty and roles
- Manage faculty and departments
- Approve/reject timetables
- Generate reports
- System configuration
- View analytics
- Manage department faculty
- Create and approve department timetables
- Monitor schedule conflicts
- Request approvals
- View department reports
- Manage faculty within scope
- Create/edit timetables
- Process requests
- View schedules and status
- Export data
- View assigned schedule
- Request schedule changes
- Manage availability
- Track request status
- Download schedules
slots/
βββ {day} (e.g., "Monday", "Tuesday")
β βββ departments/
β β βββ {deptId}
β β β βββ Classrooms/
β β β β βββ {roomId}: {room details}
β β β β βββ _meta: {metadata}
β β β βββ Labs/
β β β βββ {labId}: {lab details}
β β β βββ _meta: {metadata}
Data Structure Example:
{
"timing": "09:00-10:00",
"applications": {
"17-11-2025": [
{
"username": "Dr. Smith",
"status": "Pending|Approved|Rejected",
"reason": "Regular class"
}
]
}
}- slots/: Hierarchical storage for daily classroom/lab availability
- By Day: Monday, Tuesday, Wednesday, etc.
- By Department: Different departments
- By Section: Classrooms, Labs
- By Room/Lab ID: Specific room details
timetables/
βββ {deptId}_semester_{semesterNo}
β βββ department: string
β βββ semester: string
β βββ schedule: map (structured schedule data)
β βββ status: string (draft, pending, approved)
β βββ metadata: map
requests/
βββ {requestId}
β βββ username: string
β βββ department: string
β βββ type: string (ClassroomChange, TimeSlotChange, etc.)
β βββ status: string (pending, approved, rejected)
β βββ reason: string
β βββ createdAt: timestamp
faculty/ or faculty/
βββ {email}
β βββ username: string
β βββ email: string
β βββ department: string
β βββ isHOD: boolean
β βββ isAdmin: boolean
β βββ isSuperAdmin: boolean
β βββ createdAt: timestamp
# Debug APK
flutter build apk --debug
# Release APK
flutter build apk --release
# Split APKs by architecture
flutter build apk --release --split-per-abiflutter build appbundle --release# Build for physical device
flutter build ios --release
# Build for simulator
flutter build ios --simulator# Build web app
flutter build web --release
# Serve locally
flutter run -d chrome- Update version in
pubspec.yaml - Update Firebase configuration for production
- Set up production Firestore rules
- Configure Android signing keys
- Configure iOS provisioning profiles
- Run
flutter testto ensure all tests pass - Perform manual QA testing
- Enable crash reporting and analytics
- Set up monitoring and logging
- Document any breaking changes
Solution: Ensure Firebase.initializeApp() is called before running the app in main.dart.
flutter pub get
flutter pub upgrade
flutter clean
flutter pub getSolution: Check Firestore rules. For development:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
cd ios
pod deintegrate
pod install
cd ..
flutter clean
flutter pub get
flutter runflutter clean
cd android
./gradlew clean
cd ..
flutter pub get
flutter run- Ensure app is running in debug mode
- Try hot restart:
Rkey - If persistent, restart the app
| Package | Version | Purpose |
|---|---|---|
get |
^4.7.2 | State management & navigation |
firebase_core |
^3.13.0 | Firebase initialization |
cloud_firestore |
^5.6.12 | Cloud database |
excel |
^4.0.6 | Excel file handling |
file_picker |
^10.3.6 | File selection |
shared_preferences |
^2.5.3 | Local storage |
intl |
^0.20.2 | Internationalization |
mailer |
^6.6.0 | Email functionality |
permission_handler |
^12.0.1 | App permissions |
device_preview |
^1.2.0 | Device preview (dev) |
# Run all tests
flutter test
# Run specific test file
flutter test test/unit/test_name.dart
# Run with coverage
flutter test --coverage# Analyze code
flutter analyze
# Format code
dart format lib/
# Fix issues automatically
dart fix --applyThe app uses the logger package:
import 'package:schedule/initializations.dart';
logger.d('Debug message');
logger.i('Info message');
logger.w('Warning message');
logger.e('Error message');# Build with optimizations
flutter build apk --release --split-per-abi
flutter build appbundle --release
flutter build ios --releaseflutter build apk --release --obfuscate --split-debug-info=./symbols/| Metric | Target | Current |
|---|---|---|
| First Load | < 3s | Monitor |
| Schedule Fetch | < 2s | Optimize queries |
| Page Transition | < 300ms | Reduce rebuilds |
| Memory Usage | < 150MB | Monitor profiles |
| Firebase RTD | < 100ms | Add caching |
| App Size | < 100MB | Remove unused deps |
- Add Firestore composite indexes
- Implement pagination for large lists
- Add image caching and compression
- Enable offline persistence
- Implement batch operations
- Use const constructors throughout
- Profile with DevTools regularly
- Monitor Firestore read/write operations
- Optimize build sizes with
--split-per-abi - Add analytics and crash reporting
- Set up automated performance testing
- Reduce unnecessary widget rebuilds with Obx scoping
- Implement lazy loading for lists
- β Android: 5.1+ (API level 22+)
- β iOS: 11.0+
- β Web: Chrome, Firefox, Safari, Edge
This project is proprietary and confidential.
For issues, questions, or contributions:
- Create an issue in the repository
- Contact the development team
- Review Firebase documentation at firebase.google.com
- Check Flutter docs at flutter.dev
Last Updated: December 30, 2025
Maintained by: Development Team