Screens & Navigation
The app uses GetX routing with 6 named routes and 11 screens. The UI adapts based on the user’s role.
Navigation Flow
Intro Page (splash)
|
v
Registration Page (login)
|
v
Home Page (dashboard) --- role-based rendering:
|
|-- Check-In role -----> Check-In Layout
| |-- CheckIn (new package form)
| |-- CheckInExist (duplicate handling)
| |-- CheckInUpdate (edit existing)
|
|-- Unload role -------> Suggestion Page --> Package Layout
| |-- PackageDetails (form)
| |-- PackageExists (duplicate)
|
|-- Client Pickup -----> Client Pickup Page (3 tabs)
| |-- Unloaded/Consolidated
| |-- Client Pickup
| |-- Receiving/CheckIn
|
|-- Normal/Receiving ---> Package Layout
Routes
| Route | Path | Screen |
|---|---|---|
| INTRO_PAGE | / |
Intro splash screen |
| REGISTRATION_PAGE | /REGISTRATION_PAGE |
Login form |
| HOME | /HOME |
Main dashboard |
| CHECK_IN_LAYOUT | /CHECK_IN_LAYOUT |
Check-in wrapper |
| PACKAGE_LAYOUT | /PACKAGE_LAYOUT |
Package details wrapper |
| SUGGESTION_PAGE | /SUGGESTION_PAGE |
Search/unload helper |
1. Intro Page
File: lib/features/intro_page/intro_page.dart
Splash screen shown on app launch. Displays logo, checks for app updates, shows “What’s New” dialog. Routes to Registration or Home based on existing session.
2. Registration Page (Login)
File: lib/features/registration/presentation/pages/registration_page.dart
Login form with username, password, and role selection dropdown. Validates credentials against User collection. Enforces single-device sessions. Shows loading/success/failure/no-internet states.
3. Home Page (Dashboard)
File: lib/features/home/presentation/pages/home_page.dart
Main hub that adapts based on user role:
- Check-In (role[1]): Shows “Instant Scan” and “Instant Manual Entry” buttons. Opens camera scanner or manual tracking number input. Navigates to Check-In Layout.
- Container Unload (role[2]): Shows navigation to Suggestion Page for searching packages to unload.
- Client Pickup (role[3]): Renders the Client Pickup Page inline with tab-based package viewing.
- Normal: Shows scan and manual entry buttons, navigates to Package Layout.
Bottom nav provides SCAN and MANUAL ENTRY action buttons.
4. Client Pickup Page
File: lib/features/home/presentation/pages/client_pickup.dart
Three-tab interface for managing client pickups:
| Tab | Name | Content |
|---|---|---|
| 0 | Unloaded/Consolidated | Packages ready for pickup (status: unloaded or consolidated) |
| 1 | Client Pickup | Packages currently being picked up |
| 2 | Receiving/CheckIn | Incoming and checked-in packages |
Features:
- Search by tracking number or client name
- Container dropdown filter
- Real-time Firestore updates
- Scan/manual entry from bottom nav
5. Check-In Layout
File: lib/features/check_in/presentation/pages/check_in_layout.dart
Wrapper that conditionally renders one of three sub-screens based on package state:
- CheckIn – New package check-in form (the main one)
- CheckInExist – Duplicate/existing package handling
- CheckInUpdate – Update existing package data
Bottom nav changes per state: Save, Rescan, Update, Cancel.
6. Check-In Form
File: lib/features/check_in/presentation/pages/check_in.dart
The most complex screen. Full form for checking in packages:
| Section | Description |
|---|---|
| Client Name | Auto-complete search, fills from Clients collection |
| Tracking Number | Barcode details, carrier identification display |
| Problem Section | Photo capture, problem type selection |
| Notes | Free text package notes |
| Category | Dropdown from Categories collection |
| Item | Dropdown filtered by selected category |
| Pricing | Cost display with charge calculations |
| Charges | Additional fees (admin only) |
| Dimensions | Height, width, length (conditional on category) |
| Scan History | Timeline of all previous scans |
| Detected Packages | List of sub-packages for consolidation |
Consolidation: User can scan multiple tracking numbers within a single check-in. Sub-packages are linked to a main package via containsPackages / consolidatedInto.
7. Check-In Exist
File: lib/features/check_in/presentation/pages/check_in_exist.dart
Shown when a scanned package already exists in the system. Displays warning, shows existing data, and offers options to update or rescan.
8. Check-In Update
File: lib/features/check_in/presentation/pages/check_in_update.dart
Same form fields as Check-In but pre-populated with existing data. Allows modifying package information. Save/Cancel buttons.
9. Package Details Layout
File: lib/features/package_details.dart/presentation/pages/package_layout.dart
Wrapper for standard receiving/unloading workflow (non-check-in). Conditionally renders:
- PackageDetails – New package entry form
- PackageExists – Duplicate handling
Bottom nav: Save & Exit, Scan Next, Update, Cancel.
10. Package Details Form
File: lib/features/package_details.dart/presentation/pages/package_details.dart
Simpler than Check-In — used for standard receiving and unloading (not containerized check-in).
| Section | Description |
|---|---|
| Client Name | Auto-complete client search |
| Barcode Details | Tracking number, carrier, raw barcode |
| Unusual Tracking Warning | Alert for non-standard formats |
| Unknown Carrier Warning | Alert when carrier can’t be identified |
| Problem Section | Photo + problem type |
| Notes | Free text |
| Scan History | Timeline widget |
11. Suggestion Page (Unload Search)
File: lib/core/global/widgets/suggestion/suggestion_page.dart
Search interface used primarily by Container Unload role. Search by:
- Tracking Number
- Client Name
- Reference ID
Dropdown to select filter type. Real-time suggestions as user types. Tap to navigate to the package.