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
FackeStoreApiClientpara obtenerProductsNotifier,CartsNotifieryUsersNotifierdesde 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
riverpodpara estado ydartzpara 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(enlib/pragma_path_api_client.dart)productsNotifier()→ devuelveProductsNotifier.cartsNotifier()→ devuelveCartsNotifier.usersNotifier()→ devuelveUsersNotifier.
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
Failurey valores nulos devueltos por los notifiers. - Para tests, inyecta un
HttpMethodmock enHttpClientImpl(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:
- Abre un issue describiendo el cambio o bug.
- Crea una rama con un nombre claro.
- Añade tests cuando sea apropiado.
- 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