Ответ
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 чистой и поддерживаемой.