v4 · pub.dev
CherryPick
Лёгкая и гибкая экосистема внедрения зависимостей для Dart и Flutter: иерархические scope, синхронные и асинхронные провайдеры и кодогенерация без бойлерплейта.
DartFlutterDICodegenOpen Source
Внедрение зависимостей без лишнего
CherryPick — DI-экосистема для Dart и Flutter с чистым API, строгой типизацией и полным контролем над жизненным циклом зависимостей: от фабрик до ленивых синглтонов.
Почему CherryPick
- Минимальный API. Лаконичный синтаксис, строгая типизация, явное управление жизненным циклом биндингов.
- Иерархические scope. Дерево scope и sub-scope: зависимости разрешаются вверх по иерархии и освобождаются детерминированно.
- Sync и async. Синхронные провайдеры, асинхронные фабрики и зависимости с параметрами времени выполнения.
- Кодогенерация. Аннотируйте модули —
cherrypick_generatorсам напишет связывание. - Тестируемость. Биндинги легко переопределить, а для каждого теста собрать изолированное дерево scope.
- Flutter и чистый Dart.
CherryPickProviderпробрасывает scope в дерево виджетов, а ядро работает и на сервере.
Как это выглядит
import 'package:cherrypick/cherrypick.dart';
class AppModule extends Module {
@override
void builder(Scope currentScope) {
bind<ApiClient>().toProvide(() => ApiClient());
bind<DataRepository>()
.toProvide(() => DataRepository(currentScope.resolve<ApiClient>()))
.singleton();
}
}
void main() {
final scope = CherryPick.openRootScope()..installModules([AppModule()]);
final repo = scope.resolve<DataRepository>();
}
Производительность и надёжность
- Начиная с версии 3.0 поиск зависимостей идёт по индексу на основе
Map:resolve<T>()выполняется за O(1) независимо от числа модулей и биндингов. - Встроенное обнаружение циклических зависимостей и логирование DI-событий.
Экосистема
| Пакет | Назначение |
|---|---|
cherrypick |
Ядро: биндинги, модули, scope, освобождение ресурсов |
cherrypick_annotations |
Аннотации для лаконичного описания DI |
cherrypick_generator |
Генерация биндингов по аннотациям |
cherrypick_flutter |
Интеграция с Flutter: провайдеры и хелперы для виджетов |
talker_cherrypick_logger |
Визуальное отслеживание DI-событий и ошибок через Talker |
Установка
dependencies:
cherrypick: ^4.0.0
cherrypick_annotations: ^4.0.0
dev_dependencies:
build_runner: ^2.4.0
cherrypick_generator: ^4.0.0
Документация — на сайте проекта, обсуждение — в Telegram-сообществе.