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
NoParams
andListQuery
- 🧩 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
IEitherUseCase
IEitherNonFutureUseCase
IEitherStreamUseCase
IOptionUseCase
IOptionStreamUseCase
IFutureOptionStreamUseCase
IStreamUseCase
IFutureUseCase
IUseCase
Params
NoParams
ListQuery
Extensions
ErrorHandlingExtension
onObject
ReportEitherExtensions
onEither
FutureStreamDataLoadingExtension
forIFutureOptionStreamUseCase
StreamDataLoadingExtension
forIOptionStreamUseCase
StreamDataHandlingExtension
forOption<Stream>
States
BaseState
and concrete states:Initial
,DataLoading
,DataLoaded
,ErrorState
, etc.FormSubmissionState
and 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