cubit_base
Bloc/Cubit を使用してデータ取得とページネーションを簡略化する軽量なFlutterライブラリです。標準化された状態と、ボイラープレートを減らすためのFetcherユーティリティを提供します。
簡単な取得でキュービットを制御する
以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
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.
BaseState and BasePaginationState for consistent UI handling.Fetcher.fetchWithBase handles loading, success, and error states automatically.Fetcher.fetchWithPaginate manages page increments and "reached max" logic.Add cubit_base to your pubspec.yaml:
dependencies:
cubit_base: ^0.0.5
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)),
);
}
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)),
);
}
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.This project is licensed under the MIT License - see the LICENSE file for details.
依存関係一覧 3 件
{"sdk":"flutter"}{"sdk":"flutter"}^5.0.0用途で絞り込み、開発状況を比較し、採用前に元のリポジトリで要件を確認しましょう。
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗