Все проекты

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-сообществе.