Skip to content

sepehrTabeian/talent_form

Repository files navigation

Talent Form Application

This is a Flutter application for submitting volunteer talent information through a multi-step form. The project is built with a focus on clean architecture, scalability, and maintainability.

Project Architecture

The project follows the principles of Clean Architecture, separating concerns into three main layers:

  1. Presentation Layer: Contains the UI (Widgets) and state management (BLoC). It is responsible for displaying data and capturing user input.

    • Location: lib/features/talent_submission/presentation
    • State Management: Uses flutter_bloc to manage the form's state and events.
  2. Domain Layer: Contains the core business logic and rules of the application. This layer is independent of any framework.

    • Location: lib/features/talent_submission/domain
    • Key Components:
      • Entities: Plain Dart objects representing the core data models (e.g., VolunteerEntity).
      • Repositories: Abstract contracts for data operations.
      • Use Cases: Encapsulate specific business logic for a single task (e.g., SubmitVolunteer).
  3. Data Layer: Responsible for data retrieval and storage. It implements the repository contracts defined in the domain layer.

    • Location: lib/features/talent_submission/data
    • Key Components:
      • Data Sources: Communicate with external sources like a REST API (TalentSubmissionRemoteDataSource).
      • DTOs (Data Transfer Objects): Models that match the structure of the API response.
      • Repository Implementations: Concrete implementations of the domain repositories.

Key Features

  • Clean Architecture: Ensures separation of concerns and makes the codebase easy to test and maintain.
  • BLoC for State Management: Provides a predictable and structured way to manage the UI state.
  • Multi-Step Form: Guides the user through a three-step submission process (Personal Info, Skills, Review).
  • Dependency Injection: Uses get_it to manage and provide dependencies throughout the app.
  • Custom Networking Layer: Utilizes a local package (network_service) for handling API requests and errors.
  • Centralized String Constants: All user-facing strings are managed in lib/app/constant/constant.dart for easy modification and future localization.

Project Structure

lib
├── app
│   ├── config/         # App configuration (API paths, etc.)
│   ├── constant/       # Global constants (e.g., AppStrings)
│   ├── di/             # Dependency injection setup (GetIt)
│   └── ...
│
├── features
│   └── talent_submission/
│       ├── data/         # Data layer (repositories, data sources, DTOs)
│       ├── domain/       # Domain layer (entities, use cases, repository interfaces)
│       └── presentation/ # Presentation layer (pages, BLoC, widgets)
│
└── packages
    └── network_service/  # Local package for networking

Getting Started

Prerequisites

  • Flutter SDK (version 3.x or higher)
  • Dart SDK

How to Run

  1. Clone the repository:

    git clone <repository-url>
    cd talent_form
  2. Get dependencies:

    flutter pub get
  3. Run the app:

    flutter run

About

The goal of the application is to collect user information and skills, validate the inputs on the client side, and submit the data to an API endpoint.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages