> Как работает dependency injection во Flutter (Flutter)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Верме

Стек: Flutter

> Пример ответа

Dependency Injection (DI) - это паттерн, при котором объект получает свои зависимости извне, а не создает их сам. Во Flutter DI реализуется несколькими способами.

Основные подходы:

  1. Provider - самый популярный способ. Использует InheritedWidget под капотом. Пример:
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Provider<SomeService>(
      create: (_) => SomeService(),
      child: MaterialApp(...),
    );
  }
}

// Использование:
final service = Provider.of<SomeService>(context);
  1. Riverpod - современная альтернатива Provider, не зависящая от дерева виджетов:
final serviceProvider = Provider<SomeService>((ref) => SomeService());

// В виджете:
final service = ref.watch(serviceProvider);
  1. GetIt - простой service locator:
final getIt = GetIt.instance;
getIt.registerSingleton<SomeService>(SomeService());

// Использование:
final service = getIt<SomeService>();
  1. Bloc - использует собственный DI через BlocProvider:
BlocProvider<CounterBloc>(
  create: (_) => CounterBloc(),
  child: MyWidget(),
)

Преимущества DI во Flutter:

  • Упрощает тестирование (легко подменять зависимости)
  • Уменьшает связанность кода
  • Упрощает управление состоянием
  • Позволяет легко переиспользовать сервисы

Рекомендация: Для небольших проектов используйте Provider, для сложных - Riverpod или GetIt. Bloc подходит, если вы уже используете этот паттерн для управления состоянием.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью