Presentation Layer

Overview

The Presentation Layer of the User 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

RegisterUserScreen

User registration screen (lib/app/features/user/presentation/screen/register_user_screen.dart):

  • Implements form for new user registration with field validation

  • Collects nickname, sex, birth date, and education level

  • Prevents duplicate nicknames through real-time validation

  • Provides date picker for birth date selection

  • Uses responsive layout for different device sizes

CurrentUserDataScreen

Current user screen (lib/app/features/user/presentation/screen/current_user_data_screen.dart):

  • Displays selected user profile information in read-only mode

  • Extends RegisterUserScreenBase for consistent layout

  • Provides profile deletion functionality with confirmation dialog

  • Handles navigation back to home after profile deletion

  • Shows error message if no profile is selected

UserResultHistoryScreen

Result history screen (lib/app/features/user/presentation/screen/user_result_history_screen.dart):

  • Displays table of TMT test results for current user

  • Shows date, reference code, TMT-A time, and TMT-B time

  • Implements responsive layout with scrollable content

  • Uses localized date formatting for different regions

  • Handles empty state with appropriate message

UserScreenBase

Base screen (lib/app/features/user/presentation/screen/user_screen_base.dart):

  • Provides shared layout and functionality for user screens

  • Implements common form fields (nickname, sex, birth date, education)

  • Creates consistent form validation rules

  • Handles field spacing and responsive layout calculations

  • Manages form state and focus navigation

Controllers

UserProfileController

Profile controller (lib/app/features/user/presentation/contoller/user_profile_controller.dart):

  • Manages user profile data retrieval and persistence

  • Provides reactive state for UI components

  • Handles profile loading, saving and deletion

  • Coordinates with repository layer for data operations

  • Manages current active profile selection

TestResultLocalDataController

Test result controller (lib/app/features/user/presentation/contoller/test_result_controller.dart):

  • Manages loading and display of user test results

  • Provides reactive state for test history UI

  • Handles result loading by user ID and nickname

  • Validates reference codes for duplicate detection

  • Saves new test results to local storage

Bindings

UserProfileBinding

User binding (lib/app/features/user/presentation/binding/user_profile_binding.dart):

  • Registers dependencies for user profile management

  • Creates and configures UserDatabaseHelper

  • Sets up UserProfileDataSource with database helper

  • Configures UserProfileRepository with data source

  • Registers UserProfileController for UI state management

UserHistoryBinding

History binding (lib/app/features/user/presentation/binding/user_history_binding.dart):

  • Registers dependencies for test result history

  • Initializes database and data source components

  • Sets up TestResultLocalDataRepository

  • Registers TestResultLocalDataController

  • Ensures dependencies are only registered once

TestResultLocalDataBinding

Result binding (lib/app/features/user/presentation/binding/test_result_local_data_binding.dart):

  • Configures database helper for test results

  • Sets up TestResultLocalDataSource with database helper

  • Configures TestResultLocalDataRepository with data source

  • Registers TestResultLocalDataController

  • Manages dependency lifecycle for test result operations