Search packages, repositories and app categories

Package detailsv0.0.6

cubit_base

A lightweight Flutter library to simplify data fetching and pagination using Bloc/Cubit. It provides standardized states and a Fetcher utility to reduce boilerplate.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
49
Likes
1
Pub points
155

Install package

flutter pub add cubit_base

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

cubit_base is a lightweight Flutter library designed to streamline data fetching and pagination within Bloc/Cubit patterns. It offers standardized state management and a built-in Fetcher utility that minimizes repetitive code, making it easier to handle loading, success, and error states. By reducing boilerplate, it accelerates development while maintaining clean, predictable state transitions across platforms.

Use cases

  • Simplifying API data fetching
  • Implementing paginated lists
  • Reducing state management boilerplate
  • Building reusable data providers
  • Managing loading and error states
  • Streamlining CRUD operations

Key features

  • Standardized states for consistent UI handling
  • Built-in Fetcher utility for async operations
  • Support for pagination out of the box
  • Minimal setup with clear structure
  • Cross-platform compatibility
  • Clean separation of concerns

Suitable for

  • Developers using Bloc/Cubit patterns
  • Projects requiring frequent data fetching
  • Teams aiming to reduce boilerplate
  • Apps with paginated content
  • Beginners learning state management
  • Fast prototyping and MVP development

Considerations

  • Requires familiarity with Bloc/Cubit
  • Limited customization for complex state logic
  • Not ideal for highly dynamic state flows
  • Best suited for straightforward data operations
  • May need additional layers for advanced caching
  • Depends on external dependencies for full functionality

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

cubit_base

A lightweight Flutter library to simplify data fetching and pagination using Bloc/Cubit. It provides standardized states and a Fetcher utility to reduce boilerplate in your Clean Architecture features.

Features

  • 🚀 Standardized States: BaseState and BasePaginationState for consistent UI handling.
  • 🔄 Simplified Fetching: Fetcher.fetchWithBase handles loading, success, and error states automatically.
  • 📑 Built-in Pagination: Fetcher.fetchWithPaginate manages page increments and "reached max" logic.
  • 🏗️ Clean Architecture Friendly: Designed to work seamlessly with UseCases and DataStates.

Installation

Add cubit_base to your pubspec.yaml:

dependencies:
  cubit_base: ^0.0.5

Usage

1. Simple Data Fetching

Define your state using BaseState:

class UserState {
  final BaseState<User> user;
  
  UserState({required this.user});
  
  UserState copyWith({BaseState<User>? user}) => UserState(user: user ?? this.user);
}

Use the Fetcher in your Cubit:

Future<void> getUser() async {
  await Fetcher.fetchWithBase<User>(
    fetcher: () => _getUserUseCase.call(),
    state: state.user,
    emitter: (newState) => emit(state.copyWith(user: newState)),
  );
}
2. Pagination

Define your state using BasePaginationState:

class ProductState {
  final BasePaginationState<Product> products;

  ProductState({required this.products});

  ProductState copyWith({BasePaginationState<Product>? products}) =>
      ProductState(products: products ?? this.products);
}

Implement pagination in your Cubit:

Future<void> getProducts({bool isRefresh = false}) async {
  await Fetcher.fetchWithPaginate<Product>(
    fetcher: () => _getProductsUseCase.call(
      params: ProductParams(
        page: isRefresh ? 1 : state.products.query.page,
        size: state.products.query.size,
      ),
    ),
    state: state.products,
    isRefresh: isRefresh,
    emitter: (newState) => emit(state.copyWith(products: newState)),
  );
}

State Components

BaseState<T>

Manages a single object of type T.

  • status: initial, loading, success, error.
  • data: The fetched object.
  • error: Error message if any.
BasePaginationState<T>

Manages a list of type T.

  • list: List of items.
  • status: initial, loading, paging, success, error.
  • query: Contains page and size.
  • reachedMax: Boolean indicating if all data is loaded.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Categories

Source repository

Projects using this package

No data available yet.