DI в Flutter.

  • 26 сентября 2024
  • 64 просмотра
  • 0 комментариев

Для реализации Dependency Injection (DI) в мобильном приложении на Flutter с использованием Clean Architecture есть несколько популярных библиотек и подходов. Ниже приведен пошаговый процесс реализации DI с использованием библиотеки get_it и генератора кода injectable:

1. Настройка зависимости

Добавьте следующие зависимости в ваш pubspec.yaml файл:

dependencies:
  get_it: ^7.2.0
  injectable: ^2.0.0
  
dev_dependencies:
  injectable_generator: ^2.0.0
  build_runner: ^2.1.0

2. Конфигурация DI с помощью injectable

Injectable — это удобный способ автоматической генерации кода для внедрения зависимостей с помощью get_it.

2.1. Создайте файл конфигурации

В корневой директории проекта создайте файл lib/di/di.dart с следующей конфигурацией:

import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
import 'di.config.dart'; // Этот файл будет сгенерирован автоматически

final GetIt getIt = GetIt.instance;

@InjectableInit()
void configureDependencies() => getIt.init();

2.2. Добавьте аннотации @injectable и @singleton

Добавьте аннотации к классам, которые вы хотите внедрить через DI. Например:

import 'package:injectable/injectable.dart';

@lazySingleton
class ApiService {
  // Ваш сервис
}

@singleton
class AuthRepository {
  final ApiService apiService;

  AuthRepository(this.apiService);
}
  • @singleton — объект будет существовать в единственном экземпляре.
  • @lazySingleton — экземпляр будет создан только при первом запросе.

2.3. Генерация кода

Для генерации кода выполните команду:

flutter pub run build_runner build

Это создаст файл di.config.dart, который будет содержать конфигурацию зависимостей.

3. Инициализация DI в приложении

Теперь, в основном файле вашего приложения, инициализируйте зависимости перед запуском приложения:

import 'package:flutter/material.dart';
import 'di/di.dart';

void main() {
  configureDependencies();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

4. Использование зависимостей

Теперь вы можете получить любую зарегистрированную зависимость через get_it:

final authRepository = getIt<AuthRepository>();

Это базовая реализация DI в Flutter с использованием get_it и injectable, которая хорошо вписывается в Clean Architecture.

Альтернативы

  • flutter_riverpod — также поддерживает DI через провайдеры зависимостей.
  • states_rebuilder — реализует DI с помощью собственного механизма Injector.

Посмотреть подходящие вакансии для Flutter-разработчика можно тут!

    Оставьте отзыв
    (минимум 60 знаков)
    Оценка5/5
    Нужно авторизоваться