{"id":18207483,"url":"https://github.com/code3743/the_movie_app","last_synced_at":"2025-04-07T19:52:39.999Z","repository":{"id":258840989,"uuid":"874987573","full_name":"code3743/the_movie_app","owner":"code3743","description":"This project is a solution developed as part of a technical assessment for a selection process. It is a simple movie app that allows users to search for movies and view details about them. The app uses The Movie Database API to fetch movie data.","archived":false,"fork":false,"pushed_at":"2024-10-21T19:30:10.000Z","size":83,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-13T21:32:51.636Z","etag":null,"topics":["api","app-mobile","dart","flutter","tecnical-test"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/code3743.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-18T20:58:03.000Z","updated_at":"2024-10-21T19:30:14.000Z","dependencies_parsed_at":"2024-10-22T01:17:35.247Z","dependency_job_id":null,"html_url":"https://github.com/code3743/the_movie_app","commit_stats":null,"previous_names":["code3743/the_movie_app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code3743%2Fthe_movie_app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code3743%2Fthe_movie_app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code3743%2Fthe_movie_app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code3743%2Fthe_movie_app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code3743","download_url":"https://codeload.github.com/code3743/the_movie_app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247721928,"owners_count":20985083,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","app-mobile","dart","flutter","tecnical-test"],"created_at":"2024-11-03T13:03:08.563Z","updated_at":"2025-04-07T19:52:39.978Z","avatar_url":"https://github.com/code3743.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# The Movie App\n\nEsta es una aplicación simple de películas que permite a los usuarios buscar películas y ver detalles sobre ellas. La aplicación utiliza la [API de The Movie Database](https://www.themoviedb.org/) para obtener datos sobre las películas.\n\n## Desarrollo\n\nLa aplicación está desarrollada en Flutter y utiliza los siguientes paquetes:\n\n- `flutter_riverpod`: ^2.5.3\n- `go_router`: ^14.3.0\n- `http`: ^1.2.2\n\n## Cómo Ejecutar el Proyecto\n\n1. **Clona el repositorio:**\n   ```bash\n   git clone https://github.com/code3743/the_movie_app.git\n   cd the_movie_app\n   ```\n\n2. **Instala las dependencias:**\n   ```bash\n   flutter pub get\n   ```\n\n3. **Configura tu API Key:**\n   - Abre el archivo `lib/config/constants/api_themoviedb.dart`.\n   - Establece tu API Key en la constante correspondiente.\n\n   ```dart\n    const String API_KEY = 'YOUR_API_KEY'\n    ```\n\n4. **Ejecuta la aplicación:**\n   ```bash\n   flutter run\n   ```\n\n## Estructura del Proyecto\n\nLa arquitectura utilizada en este proyecto implementa una arquitectura limpia, promoviendo la separación de responsabilidades y facilitando el mantenimiento y la escalabilidad de la aplicación. La estructura se organiza en varias capas:\n\n- **Capa Común (common):** Aquí se encuentran componentes reutilizables como proveedores de estado, utilidades y widgets, lo que permite un desarrollo más eficiente y modular.\n\n- **Capa de Configuración (config):** Esta sección incluye constantes, configuraciones de la API y proveedores específicos, asegurando que la lógica de configuración esté centralizada y sea fácilmente accesible.\n\n- **Capa de Datos (data):** Se encarga de la gestión de datos, incluyendo las fuentes de datos, excepciones, modelos y repositorios, permitiendo una separación clara entre la lógica de negocio y la lógica de acceso a datos.\n\n- **Capa de Dominio (domain):** Contiene la lógica de negocio y las entidades, manteniendo la independencia del resto de la aplicación y facilitando pruebas unitarias.\n\n- **Capa de Interfaz de Usuario (ui):** Organiza las pantallas y widgets de la aplicación, separando claramente la lógica de presentación de la lógica de negocio.\n\n```\n.\n├── lib\n│   ├── common               # Componentes reutilizables\n│   │   ├── providers        # Proveedores de estado\n│   │   │   ├── genre_provider.dart\n│   │   │   └── now_playing_provider.dart\n│   │   ├── utils            # Utilidades generales\n│   │   │   └── format_image_url.dart\n│   │   └── widgets          # Widgets reutilizables\n│   │       ├── app_logo.dart\n│   │       ├── custom_button.dart\n│   │       ├── movie_collection.dart\n│   │       ├── movie_tile.dart\n│   │       └── widgets.dart\n│   ├── config               # Configuraciones de la aplicación\n│   │   ├── constants        # Constantes y configuraciones de la API\n│   │   │   └── api_themoviedb.dart\n│   │   ├── providers        # Proveedores de la aplicación\n│   │   │   ├── genre_usecase_provider.dart\n│   │   │   ├── movie_repository_provider.dart\n│   │   │   ├── movie_usecase_provider.dart\n│   │   │   └── search_usecase_provider.dart\n│   │   ├── router           # Rutas de navegación\n│   │   │   ├── app_router.dart\n│   │   │   └── app_router_name.dart\n│   │   └── themes           # Temas de la aplicación\n│   │       ├── app_colors.dart\n│   │       ├── app_fonts.dart\n│   │       ├── app_sizes.dart\n│   │       └── app_themes.dart\n│   ├── data                 # Gestión de datos\n│   │   └── api             # Implementación de la API\n│   │       ├── datasources  # Fuentes de datos\n│   │       │   └── themoviedb_datasource.dart\n│   │       ├── exceptions    # Manejo de excepciones\n│   │       │   └── api_exception.dart\n│   │       ├── models        # Modelos de datos\n│   │       │   ├── casting_model.dart\n│   │       │   ├── genre_model.dart\n│   │       │   └── movie_model.dart\n│   │       └── repositories   # Implementaciones de repositorios\n│   │           └── movie_repository_impl.dart\n│   ├── domain               # Lógica de negocio\n│   │   ├── datasources      # Interfaces de fuentes de datos\n│   │   │   └── movie_datasource.dart\n│   │   ├── entities         # Entidades del dominio\n│   │   │   ├── cast.dart\n│   │   │   ├── genre.dart\n│   │   │   └── movie.dart\n│   │   ├── repositories      # Interfaces de repositorios\n│   │   │   └── movie_repository.dart\n│   │   └── usecases         # Casos de uso\n│   │       ├── genre_usecase.dart\n│   │       ├── movie_usecase.dart\n│   │       └── search_usecase.dart\n│   ├── main.dart            # Punto de entrada de la aplicación\n│   └── ui                  # Interfaz de usuario\n│       ├── details          # Pantalla de detalles de la película\n│       │   ├── providers\n│       │   │   └── movie_details_provider.dart\n│       │   ├── screen\n│       │   │   └── movie_details.dart\n│       │   └── widgets\n│       │       ├── expandable_text.dart\n│       │       ├── movie_cast.dart\n│       │       ├── movie_detail.dart\n│       │       ├── movie_poster.dart\n│       │       └── widgets.dart\n│       ├── home             # Pantalla principal\n│       │   ├── delegate\n│       │   │   └── movie_search_delegate.dart\n│       │   ├── providers\n│       │   │   ├── get_movies_provider.dart\n│       │   │   ├── movies_by_category_provider.dart\n│       │   │   └── movie_search_provider.dart\n│       │   ├── screen\n│       │   │   └── home_screen.dart\n│       │   └── widgets\n│       │       ├── list_category.dart\n│       │       ├── movie_banner.dart\n│       │       ├── movie_genre_section.dart\n│       │       ├── movie_preview.dart\n│       │       ├── text_category.dart\n│       │       └── widgets.dart\n│       └── splash            # Pantalla de inicio\n│           ├── screen\n│           │   └── splash_screen.dart\n│           └── widgets\n│               ├── movie_list.dart\n│               └── movie_splash.dart\n├── test                    # Pruebas unitarias\n│   ├── common\n│   │   ├── utils\n│   │   │   └── format_image_url_test.dart\n│   │   └── widgets\n│   │       ├── app_logo_test.dart\n│   │       ├── custom_button_test.dart\n│   │       ├── movie_collection_test.dart\n│   │       └── movie_tile_test.dart\n│   ├── datasource\n│   │   └── test_movie_datasource.dart\n│   ├── domain\n│   │   └── usecases\n│   │       ├── genre_usecase_test.dart\n│   │       ├── movie_usecase_test.dart\n│   │       └── search_usecase.dart\n│   └── ui\n│       ├── home\n│       │   └── widgets\n│       │       ├── list_category_test.dart\n│       │       └── movie_banner_test.dart\n│       └── splash\n│           └── widgets\n│               └── movie_list_test.dart\n```\n\n### Ejecución de Pruebas\n\nPara ejecutar las pruebas unitarias, utiliza el siguiente comando:\n\n```bash\nflutter test\n```\n\n## Mejoras y Optimización\n\n### Otras Bibliotecas o Paquetes de Flutter\n\n- **Hive o Shared Preferences:** Para almacenar datos en caché como los favoritos de los usuarios.\n- **Dio:** Para mejorar las solicitudes HTTP y manejar errores de forma más eficaz.\n\n### Optimización del Rendimiento\n\n- **Imágenes en caché:** Implementar un sistema de caché para las imágenes, utilizando paquetes como `cached_network_image`.\n- **Lazy loading:** Cargar datos bajo demanda, por ejemplo, al hacer scroll hacia abajo en la lista.\n\n### Características Adicionales\n\n- **Favoritos:** Podría utilizar una base de datos local, como SQLite o Hive, para almacenar las películas que los usuarios marquen como favoritas, alternativamente, se podría usar un servicio en la nube como Firebase Firestore para sincronizar estos datos entre dispositivos.\n- **Calificaciones:** Similar a los favoritos, las calificaciones podrían almacenarse en una base de datos local o en la nube.\n- **Notificaciones push:** Para enviar notificaciones sobre nuevas películas o actualizaciones, se puede integrar Firebase Cloud Messaging (FCM). Esto permitiría enviar mensajes a los dispositivos de los usuarios de manera sencilla.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode3743%2Fthe_movie_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode3743%2Fthe_movie_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode3743%2Fthe_movie_app/lists"}