📦 api_connections_package
api_connections_package es un paquete Flutter que proporciona una capa de abstracción para conectarse fácilmente con la Fake Store API utilizando Dio y dartz. Está pensado para que puedas integrarlo rápida y limpiamente en tus aplicaciones Flutter.
🚀 Instalación
Agrega este paquete a tu archivo pubspec.yaml:
dependencies:
api_connections_package: ^0.0.1
Luego ejecuta:
flutter pub get
✨ Características
✅ Obtener todos los productos
🔍 Buscar un producto por ID
👤 Obtener todos los usuarios
👤 Buscar usuario por ID
🛒 Consultar todos los carritos de compras
🛒 Buscar carrito por ID
🛒 Consultar carritos por usuario
📅 Consultar carritos entre fechas
💥 Manejo de errores con Either (dartz)
📦 Estructura inmutable y desacoplada
🔄 Posibilidad de usar repositorios personalizados
✅ Preparado para pruebas unitarias
🛠️ Uso
Primero importa el paquete:
import 'package:api_connections_package/api_connections_package.dart';
🔹 Inicialización
El paquete cuenta con una única puerta de entrada llamada FakeStoreApi.
Desde esta instancia puedes acceder a products, users y carts:
final store = FakeStoreApi();
Si necesitas usar tus propios repositorios (por ejemplo, para pruebas), puedes pasarlos como parámetros:
final store = FakeStoreApi(
productRepository: MyCustomProductRepository(),
userRepository: MyCustomUserRepository(),
cartRepository: MyCustomCartRepository(),
);
🔹 Productos
// Obtener todos los productos
final result = await store.products.getAllProducts();
result.fold(
(failure) => print('Error: ${failure.message}'),
(products) => print('Productos: $products'),
);
// Obtener producto por ID
final resultById = await store.products.getProductById(1);
resultById.fold(
(failure) => print('Error: ${failure.message}'),
(product) => print('Producto: $product'),
);
🔹 Usuarios
// Obtener todos los usuarios
final result = await store.users.getAllUsers();
result.fold(
(failure) => print('Error: ${failure.message}'),
(users) => print('Usuarios: $users'),
);
// Obtener usuario por ID
final result2 = await store.users.getUserById(1);
result2.fold(
(failure) => print('Error: ${failure.message}'),
(user) => print('Usuario: $user'),
);
🔹 Carritos
// Obtener carrito por ID
final result2 = await store.carts.getCartById(2);
result2.fold(
(failure) => print('Error: ${failure.message}'),
(cart) => print('Carrito: $cart'),
);
🧪 Pruebas
Este paquete está preparado para pruebas.
Puedes pasar repositorios mock al crear la instancia de FakeStoreApi:
import 'package:api_connections_package/api_connections_package.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
class MockProductRepository implements ProductRepository {
@override
Future<Either<Failure, List<ProductModel>>> getAllProducts() async {
return Right([
ProductModel(
id: 1,
title: 'Producto 1',
price: 100,
description: 'Descripción',
category: 'category',
image: 'https://via.placeholder.com/150',
rating: RatingModel(rate: 4.5, count: 10),
),
]);
}
// Implementa otros métodos si los necesitas
}
void main() {
test('Debería retornar productos mockeados', () async {
final store = FakeStoreApi(productRepository: MockProductRepository());
final result = await store.products.getAllProducts();
expect(result.isRight(), true);
result.fold(
(_) => fail('No se esperaba un error'),
(products) => expect(products.length, 1),
);
});
}
📄 Licencia
MIT License © 2025 Fabian Pineda
🌐 Fake Store API
Este paquete se conecta a: https://fakestoreapi.com/
Libraries
- api/cart_api
- api/fakeStoreApi
- api/product_api
- api/user_api
- api_connections_pakage
- core/contracts/entity
- core/contracts/gateway
- core/contracts/no_params
- core/contracts/repository
- core/contracts/usescase
- core/error/failure
- core/error/failure_severity
- core/network/dioclient
- data/datasources/cart_gateway_implementation
- data/datasources/product_gateway_implementation
- data/datasources/user_gateway_implementation
- data/models/productmodel
- data/repositories/cart_repository_imp
- data/repositories/product_repository_impl
- data/repositories/user_repository_impl
- domain/entities/cart
- domain/entities/cart_item
- domain/entities/product
- domain/entities/user
- domain/gateways/cart_gateway
- domain/gateways/product_gateway
- domain/gateways/user_gateway
- domain/repositories/cart_repository
- domain/repositories/product_repository
- domain/repositories/user_repository
- domain/usescases/cart/add_cart
- domain/usescases/cart/delete_cart
- domain/usescases/cart/get_all_carts
- domain/usescases/cart/get_cart_by_id
- domain/usescases/cart/update_cart
- domain/usescases/product/add_product
- domain/usescases/product/delete_product
- domain/usescases/product/get_all_products
- domain/usescases/product/get_product_by_id
- domain/usescases/product/update_product
- domain/usescases/user/add_user
- domain/usescases/user/delete_user
- domain/usescases/user/get_all_users
- domain/usescases/user/get_user_by_id
- domain/usescases/user/update_user