Выпущен Dio 3.0 с поддержкой Flutter Web и Http/2.0

Android Flutter
Выпущен Dio 3.0 с поддержкой Flutter Web и Http/2.0

Флаттерс выпущен версия 1.9 Неделю назад, а самая большая функция - это интеграция трепетания в главной ветке. И сегодня,DioТакже официально выпущена версия 3.0.0, самой большой особенностью этой версии является поддержка Flutter Web и Http/2.0.

Совет по обновлению: поскольку Dio 3.0 должен поддерживать Flutter Web, код необходимо реорганизовать, чтобы он не был полностью обратно совместим.Пользователи версии 2.1 могут обратиться к3.0 Руководство по обновлению.

Веб-поддержка Flutter

Разработчикам нужно только обновить Flutter до версии 1.9 или выше, а затем обновить Dio до последней версии 3.x для поддержки Flutter Web.

Поддержка HTTP/2.0

Http/2.0 имеет несколько функций, таких как мультиплексирование каналов, сжатие заголовков, двоичная передача и отправка на стороне сервера. После версии Dio 3.0 официальный предоставляетdio_http2_adapterПлагин (HttpClientAdapter) для поддержки Http/2.0. Вот официальный пример:

import 'package:dio/dio.dart';
import 'package:dio_http2_adapter/dio_http2_adapter.dart';

main() async {
  var dio = Dio()
    ..options.baseUrl = "https://google.com"
    ..interceptors.add(LogInterceptor())
    ..httpClientAdapter = Http2Adapter(
      ConnectionManager(idleTimeout: 10000),
    );

  Response<String> response;
  response = await dio.get("/?xx=6");
  print(response.data);
}

Как видите, вам нужно только настроить Http2Adapter. Стоит отметить, что для Http2Adapter требуется параметр ConnectionManager. Основной обязанностью ConnectionManager является управление ссылками, и он является носителем реализации стратегии повторного использования ссылок в Http/2.0. Официальный предоставляет ConnectionManager по умолчанию. Его стратегия заключается в том, что запросы под одним и тем же доменным именем совместно используют соединение Socket. Когда запрос выполнен, соединение по умолчанию продолжает поддерживаться в течение 15 секунд. Разработчики могут настроить время хранения с помощью idleTimeout. Разработчики предоставляют свой собственный ConnectionManager для настройки стратегии повторного использования ссылок.

Кроме того, Http2Adapter уже обрабатывает перенаправление по умолчанию, мы можем проверить это с помощью следующего кода:

response.redirects.forEach((e){
  print("redirect: ${e.statusCode} ${e.location}");
});

выход:

redirect: 301 https://www.google.com/?xx=6
redirect: 302 https://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=https://www.google.com.hk/%3Fxx%3D6&ust=1568810110125304&usg=AOvVaw0YbFhKFoslI0LPOPFcekGy
redirect: 302 https://www.google.com.hk/?xx=6

Видно, что мы сделали три редиректа при запросе гугла на материке!

другие обновления

  • FormData поддерживает вложенность.
  • удаленUploadFileInfoкласс, представилMultipartFileДобрый;MultipartFileКласс поддерживает не только построение блоков заголовков загрузки из файлов, но и построение потоков, массивов байтов и строк.
  • CookieManager вынесен в отдельный пакет, это связано с тем, что нет необходимости вручную управлять куками во Flutter web (браузер будет управлять им автоматически), поэтому разумнее извлечь его как отдельный плагин и вводить по требованию.
  • После отмены запроса отмененная ошибка может быть поставлена ​​в очередь в очередь перехватчика (отмененное исключение в версии 2.1 передается пользователю для обработки напрямую).
  • Оптимизация кода: стандартизация API и семантика, все основные коды подверглись рефакторингу.

Для получения подробной информации см.:GitHub.com/флаттер доение….