v0.0.6
cubit_base
一个轻量级的 Flutter 库,用于使用 Bloc/Cubit 简化数据获取和分页。它提供标准化的状态和 Fetcher 工具,以减少样板代码。
1喜欢 67近 30 天下载155Pub 分数
AndroidiOSWebmacOSWindowsLinux
使用便捷获取控制 cubit
{"sdk":"flutter"}{"sdk":"flutter"}^5.0.0以下为英文项目原文快照,最新内容请访问 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.