Что такое Dio в контексте Flutter/Dart?

«Что такое Dio в контексте Flutter/Dart?» — вопрос из категории Сети, который задают на 44% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dio — это мощный и удобный HTTP-клиент для Dart, который я часто выбираю для работы с сетевыми запросами в production-приложениях на Flutter. Он предоставляет функциональность, выходящую за рамки стандартного пакета http.

Основные возможности и почему я его использую:

  • Удобный API: Прямые методы для GET, POST, PUT, DELETE и других HTTP-запросов.

    final dio = Dio();
    Response response = await dio.get('https://api.example.com/posts');
    print(response.data);
  • Интерцепторы: Позволяют централизованно обрабатывать запросы и ответы. Я добавляю интерцепторы для:

    • Автоматического добавления заголовков авторизации (Authorization: Bearer <token>).
    • Логирования всех сетевых операций в отладочном режиме.
    • Глобальной обработки ошибок и повторных попыток (retry).
  • Отмена запросов: С помощью CancelToken можно отменить запрос, например, когда пользователь покидает экран, чтобы избежать утечек памяти и ненужной нагрузки.

  • Загрузка файлов с прогрессом: Встроенная поддержка загрузки и скачивания файлов с колбэками для отображения прогресса.

    await dio.download(
      'https://example.com/largefile.zip',
      './local/file.zip',
      onReceiveProgress: (received, total) {
        print('Прогресс: ${(received / total * 100).toStringAsFixed(0)}%');
      },
    );
  • Преобразование данных: Встроенный JSON преобразователь и возможность подключения своих.

Для типичного проекта я настраиваю базовый Dio-клиент с интерцепторами и базовым URL, что делает работу с API чистой и поддерживаемой.