DocHub
All 11 screens, navigation flow, and role-based UI rendering

Screens & Navigation

The app uses GetX routing with 6 named routes and 11 screens. The UI adapts based on the user’s role.

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

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.