A comprehensive Flutter-based solution designed to digitalize and streamline the hostel leave and day-out application process. This platform facilitates seamless communication and approval workflows between students, parents, and hostel administration.
This application aims to digitalize the traditional paper-based leave application process. It provides a structured flow for request submission and tracking, ensuring transparency and efficiency for all stakeholders.
Management of student leave/day-out applications. The application supports a multi-step approval workflow: Student ➔ Parent ➔ Assistant Warden ➔ Senior Warden
The app features four distinct roles with specific interfaces and permissions:
- Student: Initiates leave/day-out requests and tracks status.
- Parent: Reviews and provides the first level of approval/verification for their child's request.
- Assistant Warden: Reviews requests after parent verification.
- Senior Warden: Final authority for request approval and management.
The project follows a clean MVVM architecture, further refined into a Controller-State pattern for scalability and testability.
I have integrated structural functional programming using the dartz package. This helped significantly in robust error handling:
- Failure Detection: By returning
Either<Failure, Success>, we avoid throwing exceptions for expected errors (like server timeouts or invalid credentials). - Predictable Flow: The UI can explicitly handle both success and error paths using
.fold(), leading to a crash-free experience.
Routing is handled globally using the go_router package.
- Declarative Routes: All routes are defined in a centralized
AppRouterconfiguration. - Deep Linking: Support for nested routes and parameter passing.
- State-Driven Redirection: Navigation flow can be controlled based on authentication status (LoginSession).
- Located in
lib/presentation/view/, separated by roles (Student, Parent, Warden). - Responsible for the UI logic only.
- Listens to the State objects to rebuild when data changes.
The ViewModel is separated into two components to isolate logic from state management:
- State: Classes extending
ChangeNotifier(typically found instate/folders). They hold observable data and callnotifyListeners()to trigger UI updates. - Controller: Classes that contain the business logic (typically in
controllers/folders). They orchestrate actions (API calls, navigation) and update the corresponding State objects.
- Centralized in the
lib/models/folder. - Contains plain data classes with
fromJson,toJson, andcopyWithmethods. - Defines the structure of API responses for centralized mapping.
The application is built with a premium, modern design language to ensure an engaging user experience:
- Liquid Glass Renderer: Advanced shader-based UI elements for a dynamic, fluid look.
- Glassmorphism: Elegant translucent surfaces with background blurs for a futuristic feel.
- Google Fonts: Integrated
InterandRobotofor crisp, professional typography. - Shimmer Effects: Smooth loading states for a polished feel during data fetching.
- Neumorphism & Inset Shadows: Subtle depth using
flutter_inset_box_shadowfor custom UI controls. - Smooth Transitions: Integrated
smooth_page_indicatorand custom animations for screen transitions.
The backbone of the application, containing shared resources and configurations:
- config: API base URLs and global constants.
- enums: Fixed value sets used across the app (Role types, Request status, Actor types).
- helpers: Specialized UI helpers like custom SnackBar managers.
- routes: Declarative routing configuration using
GoRouter. - runtime_state: Global singleton states like the current
LoginSession. - theme: Centralized styling, colors, and typography (Light/Dark themes).
- utils: General-purpose utility functions.
A self-contained feature folder for Authentication:
- Contains its own View, Controller, State, and Model to keep auth logic isolated from the main dashboard.
The modular hub for UI components:
- view/: Contains role-specific dashboards and pages (Student, Parent, Warden).
- components/: Reusable UI components used across the app.
- widgets/: Smaller, stateless atomic widgets.
The Data Access Layer:
- Contains service classes (e.g.,
AuthService,RequestService) that interact with the Backend API. - Uses functional error handling (via the
dartzpackage) to return results asEither<String, T>.
- The centralized repository for all domain models used throughout the application.
- State Management:
Provider(usingChangeNotifier). - Dependency Injection:
Get(lightweight service locator). - Routing:
GoRouter(Declarative navigation). - Networking:
httpwith functional error handling (dartz). - UI Enhancement: Glassmorphism, Liquid Glass, Shimmer, Smooth Page Indicators.
- Initialize Dependencies: Run
flutter pub get. - Run Application: Use
flutter runon your preferred device.



