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.
- ✅ 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
Add the package to your pubspec.yaml
:
dependencies:
i_tdd: ^0.0.1
Then run:
flutter pub get
class GetItems extends IEitherUseCase<List<Item>, NoParams> {
@override
Future<Either<IFailure, List<Item>>> call(NoParams params) {
// implement business logic
}
}
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')),
);
}
}
streamUseCase.loadStreamData(
params: NoParams(),
onLoading: () => emit(DataLoading()),
onSuccess: (data) => emit(DataLoaded()),
onEmpty: () => emit(ErrorState('No stream data')),
onFailed: (msg) => emit(ErrorState(msg)),
);
IEitherUseCase
IEitherNonFutureUseCase
IEitherStreamUseCase
IOptionUseCase
IOptionStreamUseCase
IFutureOptionStreamUseCase
IStreamUseCase
IFutureUseCase
IUseCase
NoParams
ListQuery
ErrorHandlingExtension
onObject
ReportEitherExtensions
onEither
FutureStreamDataLoadingExtension
forIFutureOptionStreamUseCase
StreamDataLoadingExtension
forIOptionStreamUseCase
StreamDataHandlingExtension
forOption<Stream>
BaseState
and concrete states:Initial
,DataLoading
,DataLoaded
,ErrorState
, etc.FormSubmissionState
and states:InitialFormState
,FormSubmitting
,SubmissionSuccess
,SubmissionFailed
LoadingCubit
- Typedefs for
SuccessCallback
,FailureCallback
,StreamCallback
MIT License. See LICENSE for details.
Contributions are welcome! Please submit issues and pull requests to help improve this package.