i_tdd
A utility-first package for simplifying Clean Architecture and Test-Driven Development in Flutter using Dart. It provides a wide range of abstract use cases, parameter objects, error handling extensions, and state classes, all designed to make your code more modular, testable, and maintainable.
Features
- ✅ Ready-to-use abstract classes for Future, Stream, Either, and Option-based use cases
- 🧱 Parameter classes like
NoParamsandListQuery - 🧩 Extensions for error handling and reporting with
Either - 🧼 Clean Bloc state classes and a utility
LoadingCubit - 🧪 Designed with TDD and Clean Architecture in mind
Installation
Add the package to your pubspec.yaml:
dependencies:
i_tdd: latest_version
Then run:
flutter pub get
Usage
1. Define a Use Case
class GetItems extends IEitherUseCase<List<Item>, NoParams> {
@override
Future<Either<IFailure, List<Item>>> call(NoParams params) {
// implement business logic
}
}
2. Bloc Integration
class ItemsCubit extends Cubit<BaseState> {
final GetItems getItems;
ItemsCubit(this.getItems) : super(Initial());
void fetchItems() async {
emit(DataLoading());
final result = await getItems(NoParams());
result.handleReport(
onSuccess: (data) => emit(DataLoaded()),
onFailed: (msg) => emit(ErrorState(msg)),
onEmpty: () => emit(ErrorState('No items found')),
);
}
}
3. Load Stream Data
streamUseCase.loadStreamData(
params: NoParams(),
onLoading: () => emit(DataLoading()),
onSuccess: (data) => emit(DataLoaded()),
onEmpty: () => emit(ErrorState('No stream data')),
onFailed: (msg) => emit(ErrorState(msg)),
);
API Overview
Abstract Use Cases
IEitherUseCaseIEitherNonFutureUseCaseIEitherStreamUseCaseIOptionUseCaseIOptionStreamUseCaseIFutureOptionStreamUseCaseIStreamUseCaseIFutureUseCaseIUseCase
Params
NoParamsListQuery
Extensions
ErrorHandlingExtensiononObjectReportEitherExtensionsonEitherFutureStreamDataLoadingExtensionforIFutureOptionStreamUseCaseStreamDataLoadingExtensionforIOptionStreamUseCaseStreamDataHandlingExtensionforOption<Stream>
States
BaseStateand concrete states:Initial,DataLoading,DataLoaded,ErrorState, etc.FormSubmissionStateand states:InitialFormState,FormSubmitting,SubmissionSuccess,SubmissionFailed
Utilities
LoadingCubit- Typedefs for
SuccessCallback,FailureCallback,StreamCallback
License
MIT License. See LICENSE for details.
Contribution
Contributions are welcome! Please submit issues and pull requests to help improve this package.
Libraries
- domain/models/params
- domain/usecases/i_usecase
- extensions/cubit_error_handling_extension
- extensions/either_extentions
- extensions/future_data_loading_extensions
- extensions/future_stream_data_loading_extensions
- extensions/stream_data_handling_extensions
- extensions/stream_data_loading_extensions
- i_tdd
- type_def/either_type_def