About this project

🎬 Movie App

https://embed.figma.com/design/XUI0FcwkjT7dk5oW1YI2dp/Movies-app--Community-?node-id=6-686&m=dev&t=ZvejD5NqFyy0bQZ1-1&embed-host=notion&footer=false&theme=system

πŸ—ΊοΈ Architecture Diagram & File Role Mapping

This section maps every key file to its purpose, location, and rationale.

lib/
β”œβ”€β”€ main.dart
β”‚   └── Initializes dependencies (API, Repo, UseCases)
β”‚       Injects into MovieCubit via BlocProvider
β”‚       Loads the HomeScreen

β”œβ”€β”€ core/
β”‚   └── theme/
β”‚       └── app_theme.dart
β”‚           - Global dark theme (colors, fonts)

β”œβ”€β”€ movie_app/
β”‚   β”œβ”€β”€ domain/
β”‚   β”‚   β”œβ”€β”€ entities/
β”‚   β”‚   β”‚   └── movie.dart
β”‚   β”‚   β”‚       - Core movie structure (id, title, rating, poster)
β”‚   β”‚   β”‚       - No Flutter or JSON logic
β”‚   β”‚   β”œβ”€β”€ usecases/
β”‚   β”‚   β”‚   └── get_*.dart
β”‚   β”‚   β”‚       - Business logic
β”‚   β”‚   β”‚       - Calls execute() β†’ returns List<Movie>
β”‚   β”‚   └── infra/
β”‚   β”‚       └── movie_repository.dart
β”‚   β”‚           - Abstract repository interface for use cases

β”‚   β”œβ”€β”€ infra/
β”‚   β”‚   β”œβ”€β”€ datasources/
β”‚   β”‚   β”‚   └── movie_api_service.dart
β”‚   β”‚   β”‚       - Makes raw HTTP calls
β”‚   β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”‚   └── movie_response.dart
β”‚   β”‚   β”‚       - Parses JSON
β”‚   β”‚   β”‚       - Maps to `Movie` via toEntity()
β”‚   β”‚   └── repository/
β”‚   β”‚       └── movie_repository_impl.dart
β”‚   β”‚           - Implements MovieRepository
β”‚   β”‚           - Connects API β†’ DTO β†’ Entity

β”‚   β”œβ”€β”€ presenter/
β”‚   β”‚   β”œβ”€β”€ controllers/
β”‚   β”‚   β”‚   └── cubit/
β”‚   β”‚   β”‚       β”œβ”€β”€ movie_cubit.dart
β”‚   β”‚   β”‚       β”‚   - Uses injected UseCases
β”‚   β”‚   β”‚       β”‚   - fetchMoviesByCategory(), getFeaturedMovies()
β”‚   β”‚   β”‚       └── movie_state.dart
β”‚   β”‚   β”‚           - State classes for UI: Loading, Loaded, Error
β”‚   β”‚   └── ui/
β”‚   β”‚       β”œβ”€β”€ home_screen.dart
β”‚   β”‚       β”‚   - Main UI screen
β”‚   β”‚       β”‚   - Displays search, categories, movie grid
β”‚   β”‚       └── widgets/
β”‚   β”‚           β”œβ”€β”€ search_bar_widget.dart
β”‚   β”‚           β”‚   - TextField + clear icon
β”‚   β”‚           β”œβ”€β”€ featured_movie_card.dart
β”‚   β”‚           β”‚   - Carousel for 2 top movies
β”‚   β”‚           β”œβ”€β”€ movie_grid.dart
β”‚   β”‚           β”‚   - GridView builder
β”‚   β”‚           └── movie_poster_card.dart
β”‚   β”‚               - Shows each movie poster with rating

🎯 Each file belongs to a distinct layer:

Project tasks

Tasks