Флаттера HTTP библиотека DIO 2.1 официально выпущен
Dio Является мощным DART HTTP библиотека запрос, поддержка RESTful API, FormData, перехватчик, запрос отмены, управление печенье, загрузка файлов / загрузки, тайм-аут, пользовательские адаптеры и т.д. Текущий DIOpubПоследующие 100 очков, рейтинг был внесен в список (под все вкладки)! В то же время, DIO также является наиболее популярным флаттера библиотека третьей стороной на GitHub, адрес проекта:Dio-Github。
С момента выхода 1.0, DIO получил внимание большого числа отечественных и зарубежных разработчиков и пользователей распространяется по всему миру. В то же время, он также получил много предложений, чтобы сделать функции DIO более мощный, более простой в использовании, мы интегрируем различные отзывы в 1.0, в версии 2.0, у нас есть большое обновление для DIO. Для того, чтобы иметь переход между пользователями 1.0 и 2.x, мы ставим 2.0.x-2.1.0 в качестве предварительной версии всей сети в течение примерно двух месяцев. Теперь, я очень рад сообщить всем, функция 2.x имеет сходиться, качество является стабильным, поэтому мы официально выпустили первую версию стабильной DIO 2.x сегодняDio v2.1.0。
Интерфейсы и абстракции в Dart. Переносим Dio в абстрактную сущность.
По сравнению с 1.x, 2.x во многих местах , таких как RESTful API, перехватчики, FormData, кроме этого, DIOS также введен в слой адаптера в 2ом, для передачи данных интерфейса и пользовательского MOCK базовых сетей. Библиотека обеспечивает поддержку , Общая функция была значительно улучшена по сравнению с 1.x, поэтому мы настоятельно рекомендуем всем пользователям 1.x можно обновить до 2.1.
Список изменений DIO V2.1.x
Restful API
2. Основные изменения в RESTful API в 2.x являются:
- служба поддержки Uri В 1.x, то URL может быть только строкой, и все интерфейсы в 2.1 обеспечивают версии, которые поддерживают URI, такие как метод GET. dio.get(. ) и dio.gerUri(. ) 。
- Все методы поддерживаются queryParameters 2.1 семантика параметров стандартизировать и разрешить все запросы передать запрос, в то время как DATA представляется только для способа представления запрошенного тела, такие как тело запроса. В дополнении к Uri.queryParameters , У нас есть RESTful API queryParameters Функция была усилена, есть два основных отличия:
- Значение параметра отличается, бывший может принимать только Map> Введите параметры, в то время как последний может принять Map Введите, например, как:
dio.getUri(Uri(url, queryParameters: «age»:15>)) // выбросит исключение, значение URI.QueryParameter не может быть типа INT dio.get(url, queryParameters: «age»:15>); // Хорошо! Копировать код
dio.options.baseUrl=»http://domain.com/»; // Окончательный URI следующего запроса: http://domain.com/API? Выполнен = 1 и выставлен = 2 Response response = await dio.getUri( Uri(path: «api»,queryParameters: «selectedId»: [«1», «2»],>); ); // Окончательный URI следующего запроса: https: //flutterchina.club? Выбран% 5b% 5d = 1 и выставлено% 5b% 5d = 2 dio.get(«api»,queryParameters: «selectedId»: [«1», «2»], >); Копировать код
истребитель-перехватчик
- Поддержка установки нескольких перехватчиков; Таким образом, мы можем выделить некоторые функции, такие как запрос печати / журналы реагирования и управление печеньем может быть упакованы индивидуально в перехватчика так, что в расцепления может увеличить повторное использование кода. 2.1 перехватчик очередь, и перехватчик будет выполнен в Фифи, если blockbus в очереди возвращает ответ или ошибка, запрос заканчивается, перехватчик за очереди не будет выполняться.
- Предустановленная LogintercePtor для печати журналов запросов / ответов и управления cookieManager перехватчиками Пирожка, разработчики могут использовать по мере необходимости, такие как:
dio.interceptors ..add(LogInterceptor(responseBody: false)) ..add(CookieManager(CookieJar())); Копировать код
FormData
В случае подачи FormData, FormData будет передано в двоичный массив, а затем представить, что является относительно большим , когда объем данных в FormData (например, в том числе несколько больших файлов) сравниваются в процессе загрузки.. 2.1 Наша команда FormData была усовершенствована, добавьте атрибут поток в FormData, который может превратить FormData в поток, не нужно загружать в память в то время, когда не совершал.
БОРЮСЬ С ГУСЁМ ЗА СВОЙ КОМПЬЮТЕР
В то же время, FormData также добавил asBytes() 、 asBytesAsync() 、 length Методы, атрибуты.
Response
Добавить несколько полей о информации переназначения, есть isRedirect 、 redirects 、 realUri 。
TransFormer
2.X добавляется к DefaultTransformer. jsonDecodeCallback Через него можно настроить JSON декодер, это очень полезно в трепетание, мы можем передать compute Метод для выполнения JSON-декодирования в фоновом режиме, тем самым избегая коробки интерфейса, вызванные в потоке пользовательского интерфейса для декодирования сложного JSON. Для получения дополнительной информации, пожалуйста, смздесь 。
HttpClientAdapter
HttpClientAdapter является мостом между DIO и HTTPClient. 2.0 слои Аннотация Адаптер может принести два основных преимущества:
- Реализация Дио развязку HTTPClient, который может быть легко переключаться и настраивает базовую сетевую библиотеку.
- Может Макет данных;
DIO реализует набор стандартов, мощный API, и HTTPClient является объектом, который действительно инициирует HTTP запросы. Два не фиксированы один-на-один отношений, мы можем полностью передать другие библиотеки сети при использовании DIO (не только DART HttpClient ) Инициировать сетевой запрос. Мы будем декупли Dio и httpClient через httpClientadapter, чтобы мы могли свободно настроить базовую реализацию HTTP-запросов. Например, в трепетании мы можем пересылать HTTP-запросы на нажатие на пользовательских httpclientadapter, а затем инициировать запросы на юридических условиях. Например, если один день OKHTTP предоставляет версию DART, вы хотите использовать OKHTTT для инициирования HTTP-запросов, вы можете легко переключаться на OKHTTP через адаптер, чтобы не изменить предыдущий код.
Диологическое использование DefaultHttpClientAdapter Как по умолчанию httpClientadapter, DefaultHttpClientAdapter использовать dart:io:HttpClient Инициировать сетевой запрос.
здесь Существует пример простого пользовательского адаптера, и читатель может ссылаться. Кроме того, автоматизированный тестовый случай этого проекта настроен.MockAdapterЧтобы имитировать сервер для возврата данных.
Options
Options Объект содержит конфигурации для сетевых запросов, в которых используется конфигурация случая или один запрос, используется ли настройка экземпляра или один запрос. Options Объекты, это принесет некоторое неудовлетворительное, и даже иногда заставит разработчики чувствовать себя озадаченным, таким как Options.baseUrl Атрибут представляет собой базовый адрес запроса, теоретически его следует устанавливать только в конфигурации экземпляра и не должен отображаться в конфигурации каждого запроса; Options.path Атрибут, он представляет относительный путь запроса, не должен находиться в конфигурации запроса экземпляра. 2.1 будет удален на три класса по запросу.
BaseOptions | Конфигурация базы диакванамента DiO, по умолчанию для всех запросов для этого экземпляра DIO |
Options | Конфигурация отдельной запроса, вы можете перезаписать атрибут того же имена в BASTOPTIONS |
RequestOptions | Окончательная конфигурация запроса — это объединенный вариант и базовы |
Кроме того, были добавлены некоторые новые элементы конфигурации:
- cookies : Вы можете добавить некоторые публичные печенья
- receiveDataWhenStatusError : Когда код состояния ответа не является статусом успеха (например, 404), принимается ли содержимое ответа, если false ,но response.data Будет нулевой
- maxRedirects : Перенаправьте максимальное количество раз.
Финансируется в: HTTPS: //juejin.im/post/5c871b256fb9a049bb7d2c32
Источник: russianblogs.com
Программное обеспечение
Программа «DIO_Archiver» ПО «DIO_Archiver»- программа чтения архива и формирования отчетов предназначена для чтения архивов с тепловычислителей DIO-99M и их обработки на ПК Настройка модема В программе «DIO_Archiver», программирование модемов производится непосредственно из. »
Теплосчетчик ДИО-99М — как снять показания? Теплосчетчик ДИО-99М — как и чем снимать показания? Для снятия показаний с теплосчетчика дио 99 вам понадобится накопительный пульт ПН-1 или модем, компьютер или ноутбук с установленной программой DIO_Archiver. Скачать бесплатно программу для снятия. »
«МастерФлоу-Сервис» Сервисная программа для проведения градуировки (поверки) преобразователей расхода вихревых электромагнитных ВЭПС, ВПС и электромагнитных МастерФлоу (МФ) Руководство. »
Источник: konvent-mf.ru
Сетевые вызовы во флаттере
Каждое мобильное приложение должно взаимодействовать с внешним API через Интернет, чтобы предоставлять дополнительные функции, улучшающие взаимодействие с пользователем и расширяющие набор функций приложения. Это может включать аутентификацию, настраиваемую бизнес-логику, загрузку файлов и т. Д.
Большинство разработчиков Flutter используют для этого пакет http . Хотя это работает, существует более лучший, менее известный пакет под названием Dio.
Dio — это мощный HTTP-клиент для Dart, который поддерживает перехватчики, глобальную конфигурацию, FormData, отмену запроса, загрузку файлов, тайм-аут и т. Д.
Содержание —
- Установка и настройка
- Основные запросы
- FormData и загрузка файлов
- Перехватчики
- Шаблонный проект
1. Установка и настройка
Чтобы добавить Dio в свой проект флаттера, просто добавьте следующую строку в свой pubspec.yaml файл —
dependencies: dio: ^3.0.9
А затем запустите — flutter pub get , если ваш редактор кода не получает автоматически зависимости для вас.
Чтобы использовать Dio, просто создайте экземпляр Dio, вызвав конструктор —
import ‘package:dio/dio.dart’; Dio dio = new Dio();
2. Основные запросы
Давайте сначала рассмотрим базовые запросы, GET , POST , PUT и DELETE . Я собираюсь создать отдельные функции для каждого типа запроса, чтобы мы могли повторно использовать их с дополнительными деталями во вспомогательном классе, который мы компилируем в конце этого поста.
void getHTTP(String url) async < try < Response response = await dio.get(url); // Do whatever > on DioError catch (e) < // Do whatever >> void postHTTP(String url, Map data) async < try < Response response = await dio.
post(url, data: data); // Do whatever > on DioError catch (e) < // Do whatever >> void putHTTP(String url, Map data) async < try < Response response = await dio.put(url, data: data); // Do whatever > on DioError catch (e) < // Do whatever >> void deleteHTTP(String url) async < try < Response response = await dio.
delete(url); // Do whatever > on DioError catch (e) < // Do whatever >>
3. FormData и загрузка файлов
Большинству приложений необходимо отправлять файлы / изображения на сервер как multipart/form-data , и этого очень легко добиться с помощью Dio благодаря всем классам и методам, доступным в пакете Dio.
// Single File with Additional Data FormData formData = FormData.fromMap(< «name»: «Ryan Dsilva», «age»: 21, «file»: await MultipartFile.fromFile(«PATH», filename:»OPTIONAL»), >); // Multiple Files with Additional Data FormData formData = FormData.fromMap(< «name»: «Ryan Dsilva», «age»: 21, «files»: [ await MultipartFile.fromFile(«PATH», filename:»OPTIONAL»), MultipartFile.fromFileSync(«PATH», filename:»OPTIONAL») ], >);
Для всех, кто хочет использовать синхронную версию чтения файла, есть функция MultipartFile.fromFileSync() , которую можно использовать без ключевого слова async .
Затем этот объект FormData может быть отправлен как полезная нагрузка в POST и PUT запросах, как обычно.
ПРЕДОСТЕРЕЖЕНИЯ — при отправке нескольких файлов ключ в formData отправляется как files[] , а не files , т.е. квадратные скобки включены. Поэтому, если у вас возникнут проблемы с вашим API, не используйте конструктор fromMap() для FormData, создайте его самостоятельно. Я потратил немало часов на выяснение этой крошечной детали.
4. Перехватчики
Почти каждый современный API защищен веб-токенами JSON, и практика прикрепления токена авторизации к заголовку сейчас считается стандартной. И Dio, и обычные пакеты http позволяют добавлять заголовки к запросам, но у Dio есть кое-что более интересное под названием Перехватчики.
Перехватчики — это блоки кода, которые выполняются до ожидаемого действия, то есть перехватывают действие до завершения. Перехватчики можно запускать в 3 местах — onRequest , onResponse и onError .
Перехватчики применяются к каждому запросу, ответу или ошибке, если они настроены, как показано ниже. Некоторые распространенные варианты использования перехватчиков — это авторизация с использованием веб-токенов JSON, анализ JSON и т. Д. Общая структура перехватчиков показана ниже —
dio.interceptors.add(InterceptorsWrapper( onRequest:(RequestOptions options) async < // Do something before the request is sent return options; >, onResponse:(Response response) async < // Do something with response data return response; >, onError: (DioError e) async < // Do something with response error return e; > ));
В случае присоединения веб-токена JSON перехватчик можно записать следующим образом:
Dio addInterceptors(Dio dio) < return dio ..interceptors.add(InterceptorsWrapper( onRequest: (RequestOptions options) =>reqInterceptor(options), onError: (DioError e) async < return e.response.data; >), ); > dynamic reqInterceptor(RequestOptions options) async < // Fetching JWT logic const token = »; options.headers.addAll(); return options; >
reqInterceptor() извлекает JWT из приложения и добавляет его в заголовки запроса.
5. Boilerplate a.k.a Template.
Если вы прошли через все эти разделы, то знаете, что это может привести к появлению большого количества шаблонного кода даже с синтаксическим сахаром, который приносит Dio, и, следовательно, я почувствовал необходимость создания вспомогательного класса, который я мог бы повторно использовать для каждого проекта — подробнее сравнимо с своего рода шаблоном. Этот единственный файл может быть создан в каждом проекте Flutter, и у вас есть настройка Dio, и он готов к работе. Это также помогает сохранить код удобочитаемым и удобочитаемым.
Вот весь вспомогательный класс —
Вот важные разделы файла —
- BaseOptions — это глобальные настройки, которые можно использовать для всех запросов. Такие вещи, как базовый URL-адрес, тип ответа, таймауты и т. Д., Могут быть установлены здесь как глобальные переменные.
- Перехватчики — любые настраиваемые перехватчики, которые должны запускаться перед запросом / ответом / ошибкой. Прикрепить JWT почти не составляет труда для большинства людей и, вероятно, является наиболее распространенным вариантом использования для большинства приложений.
- Методы — стандартные HTTP-методы GET , POST , PUT и DELETE , окруженные блоком try..catch , который улавливает объект DioError . Таким образом Dio обертывает любые возникающие ошибки.
Чтобы использовать этот класс, просто создайте объект, а затем вызовите соответствующие методы везде, где вам нужно —
ApiBaseHelper api = ApiBaseHelper(); Response res = api.get(‘ENDPOINT_URL’);
Вот и все! Надеюсь, вы узнали что-то новое и с нетерпением ждете возможности попробовать Дио в своем следующем проекте Flutter. Большое вам спасибо, если вы зашли так далеко. Поделитесь этой статьей, если она вам помогла, и мы будем благодарны за любые отзывы.
Я скоро вернусь с новым контентом! Следуйте за мной на GitHub, чтобы быть в курсе моих последних проектов —
Источник: digitrain.ru