Ответ
В экосистеме Dart/Flutter есть несколько популярных HTTP-клиентов, каждый со своими сильными сторонами:
-
package:http(официальный):- Плюсы: Простой, надежный, поддерживается командой Dart. Идеален для базовых запросов.
- Минусы: Минималистичный, требует ручного написания boilerplate-кода для сложных сценариев.
import 'package:http/http.dart' as http;
var response = await http.get( Uri.parse('https://jsonplaceholder.typicode.com/posts/1'), ); if (response.statusCode == 200) { print('Response body: ${response.body}'); }
-
dio:- Плюсы: Мощный клиент с поддержкой перехватчиков (
Interceptors), глобальной конфигурации,FormData, отмены запросов (CancelToken), таймаутов, загрузки файлов с прогрессом. - Минусы: Больше зависимостей по сравнению с
package:http.import 'package:dio/dio.dart';
var dio = Dio(); // Глобальная настройка dio.options.connectTimeout = Duration(seconds: 5);
// Запрос с перехватчиком для логирования dio.interceptors.add(LogInterceptor()); var response = await dio.get('/test?id=12&name=dio');
- Плюсы: Мощный клиент с поддержкой перехватчиков (
-
chopper/retrofit:- Плюсы: Используют кодогенерацию для создания типизированного API-клиента на основе аннотаций, что сильно сокращает шаблонный код и повышает безопасность типов.
Retrofitпостроен поверхdio. - Минусы: Требуют настройки кодогенерации (
build_runner).
- Плюсы: Используют кодогенерацию для создания типизированного API-клиента на основе аннотаций, что сильно сокращает шаблонный код и повышает безопасность типов.
Выбор: Для большинства проектов я начинаю с dio из-за его богатой функциональности. Для простых задач или если важен минимальный размер приложения — package:http. Для больших проектов со строгим API-контрактом рассматриваю retrofit.