pragma_path_api_client

Documentación detallada del paquete Dart/Flutter pragma_path_api_client.

Este paquete proporciona utilidades y una capa de cliente para interactuar con una Fake Store API (API de ejemplo) y expone notifiers y helpers para consumir dicha API desde una aplicación Flutter.


Resumen

pragma_path_api_client es un paquete cliente que sigue una arquitectura por capas (core, data, domain, presentation). Proporciona:

  • Cliente HTTP minimalista y adaptador (core/network).
  • Modelos y mappers para productos, carritos y usuarios (data/mappers, models).
  • Casos de uso y entidades en la capa domain.
  • Notifiers y un punto de entrada público FackeStoreApiClient para obtener ProductsNotifier, CartsNotifier y UsersNotifier desde la capa de presentación (útil en Flutter apps).

Características principales

  • API-friendly: devuelve resultados envueltos en Either<Failure, T> para un manejo de errores funcional.
  • Separación clara de responsabilidades (inspirado en Clean Architecture).
  • Integración con riverpod para estado y dartz para tipos funcionales.
  • App de ejemplo incluida en example/ que demuestra las operaciones básicas.

Requisitos

  • Dart SDK: ^3.9.2
  • Flutter: sigue la restricción en pubspec.yaml (revisar antes de publicar).
  • Dependencias principales: riverpod, http, dartz, logger.

Nota: verifica la versión de Flutter que usas localmente. Si tu objetivo es publicar el package para usuarios de Flutter 3.x, actualiza el constraint en pubspec.yaml a flutter: ">=3.0.0" (ver sección "Sugerencias para pubspec").


Instalación

Añade en el pubspec.yaml de tu proyecto consumidor:

dependencies:
  pragma_path_api_client:
    git:
      url: https://github.com/your-org/pragma_path_api_client.git
      ref: main

O si el paquete ya está publicado en pub.dev:

dependencies:
  pragma_path_api_client: ^0.0.1

Luego:

flutter pub get

Uso rápido (ejemplo)

Importa el punto de entrada público y utiliza los notifiers expuestos por la librería. Los notifiers implementan métodos async para cargar datos.

import 'package:pragma_path_api_client/pragma_path_api_client.dart';

// Obtener el notifier de productos
final productsNotifier = FackeStoreApiClient.productsNotifier();

// Cargar todos los productos
final products = await productsNotifier.loadAllProducts();

// Obtener un producto por id
final product = await productsNotifier.loadProductById(1);

Observación: los métodos del Notifier devuelven tipos nulos (Product? o List<Product>?) en la implementación actual del ejemplo; maneja null en tu código según sea necesario.


API pública (resumen)

Los puntos de entrada más relevantes para consumidores del paquete son:

  • FackeStoreApiClient (en lib/pragma_path_api_client.dart)
    • productsNotifier() → devuelve ProductsNotifier.
    • cartsNotifier() → devuelve CartsNotifier.
    • usersNotifier() → devuelve UsersNotifier.

Además, el paquete exporta el contenido de core/network (clientes HTTP) y los modelos en domain/entities para que puedas usarlos en tu app.

Para una referencia completa de la API, revisa los comentarios /// dentro de los archivos en lib/ (ya añadidos a las clases centrales).


Ejemplo

La carpeta example/ contiene una app Flutter que demuestra las operaciones más comunes (obtener productos, crear producto, obtener carritos y usuarios). Ejecuta la app de ejemplo con:

cd example
flutter pub get
flutter run

Buenas prácticas al usar el paquete

  • Maneja los Failure y valores nulos devueltos por los notifiers.
  • Para tests, inyecta un HttpMethod mock en HttpClientImpl (la implementación permite delegación), o mockea los notifiers en la capa de presentación.
  • Añade timeouts y reintentos en la capa cliente si tus escenarios lo requieren.

Contribuciones

Se agradecen PRs. Por favor:

  1. Abre un issue describiendo el cambio o bug.
  2. Crea una rama con un nombre claro.
  3. Añade tests cuando sea apropiado.
  4. Mantén el estilo y usa dart format.

Licencia

Este proyecto está licenciado bajo la licencia MIT. El texto completo de la licencia se encuentra en el archivo LICENSE del repositorio. La licencia incluye la atribución al autor:

MIT License

Copyright (c) 2025 Jhony Rentería Rodríguez

Puedes usar, copiar y modificar el código conforme a los términos de la licencia MIT; revisa el archivo LICENSE para los detalles completos.

Libraries

core/constants/constants
core/constants/defautl_error
core/core
core/error/error
core/error/exceptions
core/error/failure
core/logger/app_logger
core/logger/logger
core/network/http_client
core/network/http_client_impl
core/network/http_headers
core/network/http_method
core/network/network
data/data
data/datasources/cart_remote_datasource
data/datasources/datasources
data/datasources/products_remote_datasource
data/datasources/user_remote_datasource
data/mappers/cart/cart
data/mappers/cart/cart_mapper
data/mappers/cart/cart_product_mapper
data/mappers/mappers
data/mappers/product/product
data/mappers/product/product_mapper
data/mappers/product/rating_mapper
data/mappers/user/address_mapper
data/mappers/user/geolocation_mapper
data/mappers/user/name_mapper
data/mappers/user/user
data/mappers/user/user_mapper
data/models/cart/cart
data/models/cart/cart_model
data/models/cart/cart_product_model
data/models/models
data/models/product/product
data/models/product/product_model
data/models/product/rating_model
data/models/user/address_model
data/models/user/geolocation_model
data/models/user/name_model
data/models/user/user
data/models/user/user_model
data/repositories/carts_repository_impl
data/repositories/products_repository_impl
data/repositories/repositories
data/repositories/users_repository_impl
domain/domain
domain/entities/cart_entities/cart
domain/entities/cart_entities/cart_entities
domain/entities/cart_entities/cart_product
domain/entities/entities
domain/entities/product_entities/product
domain/entities/product_entities/product_entities
domain/entities/product_entities/rating
domain/entities/user_entities/address
domain/entities/user_entities/geolocation
domain/entities/user_entities/name
domain/entities/user_entities/user
domain/entities/user_entities/user_entities
domain/repositories/cart_repository
domain/repositories/products_repository
domain/repositories/repositories
domain/repositories/user_repository
domain/usecases/cart/cart
domain/usecases/cart/get_carts_usecase
domain/usecases/product/create_product_usecase
domain/usecases/product/get_product_by_id_usecase
domain/usecases/product/get_products_usecase
domain/usecases/product/product
domain/usecases/usecases
domain/usecases/user/get_users_usecase
domain/usecases/user/user
pragma_path_api_client
presentation/facke_store_api_client
presentation/presentation
presentation/state/notifier/carts_notifier
presentation/state/notifier/notifier
presentation/state/notifier/products_notifier
presentation/state/notifier/users_notifier
presentation/state/provider/cart/cart
presentation/state/provider/cart/cart_providers_module
presentation/state/provider/cart/cart_remote_data_source_provider
presentation/state/provider/cart/cart_repository_provider
presentation/state/provider/cart/cart_usecase_provider
presentation/state/provider/product/product
presentation/state/provider/product/product_providers_module
presentation/state/provider/product/product_remote_data_source_provider
presentation/state/provider/product/product_repository_provider
presentation/state/provider/product/products_usecase_provider
presentation/state/provider/provider
presentation/state/provider/user/user
presentation/state/provider/user/user_providers_module
presentation/state/provider/user/user_remote_data_source_provider
presentation/state/provider/user/user_repository_provider
presentation/state/provider/user/user_usecase_provider
presentation/state/state