Presentation Layer

Overview

The Presentation Layer of the Home module implements the user interface components and interaction logic. It follows the GetX state management pattern to maintain a reactive UI while keeping the code clean and modular.

Screens

HomePage

The main screen of the application (lib/app/features/home/presentation/screens/home_page.dart):

  • Serves as the application’s entry point and central navigation hub

  • Implements a responsive layout that adapts to different screen sizes and orientations

  • Uses GetX for state management and dependency injection

  • Manages system UI overlay styles for consistent theme application

Key features:
  • Profile selection interface

  • Reference code validation

  • TMT test access and configuration

  • Navigation to user data and test history screens

Components

HomeHeader

Header component (lib/app/features/home/presentation/components/home_page_header.dart):

  • Displays the Madrid health logo

  • Provides theme switching functionality (light/dark modes)

  • Includes language selection (English, Spanish, Chinese)

  • Uses SVG assets for consistent rendering across devices

SelectUserDropdown

User selection component (lib/app/features/home/presentation/components/select_user_dropdown.dart):

  • Displays current user with greeting when a profile is selected

  • Shows “Create profile” prompt when no profile exists

  • Opens user selection dialog for profile management

  • Adapts its appearance based on screen orientation

  • Automatically refreshes after profile changes

  • Observes route changes to detect new user registrations

ReferenceCodeInput

Reference code component (lib/app/features/home/presentation/components/reference_code_input.dart):

  • Implements a dual-field input for reference code format (prefix-suffix)

  • Provides validation feedback with error messaging

  • Uses custom text formatters for input standardization

  • Features edit and confirm actions

  • Adapts its appearance based on validation state and active status

  • Implements focus management for smooth input experience

TmtTestButtonCard

TMT test button component (lib/app/features/home/presentation/components/tmt_test_button_card.dart):

  • Provides prominent button for starting the TMT test

  • Includes dropdown to select circle count (15 or 25 circles)

  • Offers help dialog explaining circle count options

  • Adapts its appearance based on reference code validation status

  • Saves circle count preference for future sessions

  • Features responsive layout for different screen sizes

HomeCardButton

Card button component (lib/app/features/home/presentation/components/home_card_button.dart):

  • Reusable button component with card-like appearance

  • Supports different height configurations

  • Implements touch feedback effects

  • Displays lock icon in disabled state

  • Adapts appearance based on theme (light/dark)

Controllers

ReferenceCodeController

Reference validation controller (lib/app/features/home/presentation/controllers/reference_code_controller.dart):

  • Manages reference code validation state

  • Coordinates with domain layer validation use case

  • Maintains validation flags (isValidating, isValidated)

  • Stores validated reference code

  • Provides error message handling and display

  • Implements validation reset functionality

SelectUserProfileController

User profile controller (lib/app/features/home/presentation/controllers/select_user_profile_controller.dart):

  • Extends base UserProfileController with home-specific functionality

  • Maintains list of available user profiles

  • Handles current profile selection and switching

  • Provides profile search capability

  • Manages profile deletion with confirmation

  • Shows success/error feedback via snackbars

  • Implements refresh mechanism after profile changes

Bindings

HomeScreenBinding

Home screen binding (lib/app/features/home/presentation/binding/home_screen_binding.dart):

  • Minimal implementation for core home dependencies

ReferenceValidationBinding

Reference validation binding (lib/app/features/home/presentation/binding/reference_validation_biding.dart):

  • Sets up database helper

  • Configures test result data source

  • Initializes reference validation repository

  • Sets up validation use case

  • Creates reference code controller

SelectUserBinding

User selection binding (lib/app/features/home/presentation/binding/select_user_profile_binding.dart):

  • Sets up database helper if not already registered

  • Configures user profile data source

  • Initializes user profile repository

  • Creates select user controller instance

The presentation layer implements a cohesive, responsive interface while maintaining clean separation from business logic and data access layers.