Какие HTTP-клиенты для Dart/Flutter ты знаешь?

«Какие HTTP-клиенты для Dart/Flutter ты знаешь?» — вопрос из категории Сети, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В экосистеме Dart/Flutter есть несколько популярных HTTP-клиентов, каждый со своими сильными сторонами:

  1. 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}'); }

  2. 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');

  3. chopper / retrofit:

    • Плюсы: Используют кодогенерацию для создания типизированного API-клиента на основе аннотаций, что сильно сокращает шаблонный код и повышает безопасность типов. Retrofit построен поверх dio.
    • Минусы: Требуют настройки кодогенерации (build_runner).

Выбор: Для большинства проектов я начинаю с dio из-за его богатой функциональности. Для простых задач или если важен минимальный размер приложения — package:http. Для больших проектов со строгим API-контрактом рассматриваю retrofit.