Как добавить параметры запроса в HTTP-запрос Dart? - PullRequest
0 голосов
/ 15 октября 2018

Как правильно добавить параметры запроса в HTTP-запрос на получение Dart?Мне не удалось получить правильный ответ на мой запрос при попытке добавить «? Param1 = one¶m2 = two» к моему URL, но в Postman он работает правильно.Вот суть моего кода:

    final String url = "https://www.myurl.com/api/v1/test/";
    String workingStringInPostman = "https://www.myurl.com/api/v1/test/123/?param1=one&param2=two";

    Map<String, String> qParams = {
     'param1': 'one',
     'param2': 'two',
    };


   var res = await http
      .get(Uri.encodeFull("$url${widget.pk}/"),
      headers: {HttpHeaders.authorizationHeader: "Token $token", 
        HttpHeaders.contentTypeHeader: "application/json"},
);

$ {widget.pk} является просто передачей целочисленного значения (См. Значение 123 в переменной workingStringInPostman.

Здесь есть qParamsдля удобства, если требуется параметр Uri.

Пример кода приветствуется.

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Существует пакет dart, который предоставляет некоторые вспомогательные классы для запросов http.

BasicUtils: https://github.com/Ephenodrom/Dart-Basic-Utils

Установите его с помощью:

dependencies:
  basic_utils: ^1.4.0

Использование

Вы можете добавить карту заголовков и параметры запроса к каждому запросу.См. Пример:

// Define some headers and query parameters
Map<String, String> headers = {
  "Accept": "application/json"
};
Map<String, String> queryParameters = {
  "foo": "bar"
};

// Body
String body = "{ 'some':'json'}";

// Send request
Map<String, dynamic> responseData = await HttpUtils.postForJson("api.com/dosomething", body,
      headers: headers, queryParameters: queryParameters);

Дополнительная информация:

Это все методы из класса HttpUtils.

Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
0 голосов
/ 15 октября 2018

Вы захотите построить Uri и использовать его для запроса.Что-то вроде

var queryParameters = {
  'param1': 'one',
  'param2': 'two',
};
var uri =
    Uri.https('www.myurl.com', '/api/v1/test/${widget.pk}', queryParameters);
var response = await http.get(uri, headers: {
  HttpHeaders.authorizationHeader: 'Token $token',
  HttpHeaders.contentTypeHeader: 'application/json',
});

См. https://api.dartlang.org/stable/2.0.0/dart-core/Uri/Uri.https.html

...