Dart - 发送列表形式的 GET 参数

问题描述 投票:0回答:2

我想在 dart 中使用 http GET 请求发送参数。这里的第一个答案很好地说明了这一点:How do you add queryparameters to a Dart http request?

var uri =
    Uri.https('www.myurl.com', '/api/query', queryParameters);

但是,一个主要问题是 queryParameters 只接受:

Map<String, String>

这不允许我传入列表/数组。

如果我将 get 请求更改为 post 请求,我可以轻松发送 主体(作为 json 编码的字符串)如 flutter 文档所述:https://pub.dev/documentation/http/latest/http/post.html

post(url, {Map<String, String> headers, body, Encoding encoding})

但是,get 请求没有这样的等效参数作为查询参数:https://pub.dev/documentation/http/latest/http/get.html

get(url, {Map<String, String> headers})

我也尝试过将查询参数直接添加到网址,如下所示:

get('www.myurl.com/api/query/?array[]=value1&array[]=value2&array[]=value3)

但是当我在服务器中收到它时,方括号 [] 总是会转换为 %5B%5D。

如有任何帮助,我们将不胜感激。 谢谢

http flutter dart
2个回答
11
投票

事实上,

queryParameter
需要
Map<String, dynamic>
。检查源代码:

  factory Uri(
      {String scheme,
      String userInfo,
      String host,
      int port,
      String path,
      Iterable<String> pathSegments,
      String query,
      Map<String, dynamic /*String|Iterable<String>*/ > queryParameters,
      String fragment}) = _Uri;

dynamic
可以是
String
Iterable<String>
。所以,

  var uri = Uri(
    scheme: 'http',
    host: 'www.myurl.com',
    path: '/api/query/',
    queryParameters: {
      'array': ['value1', 'value2', 'value3'],
    },
  );
  print(uri);

打印:

http://www.myurl.com/api/query/?array=value1&array=value2&array=value3

0
投票

您还可以在列表本身上使用 .toString : 注意:使用http包> http:^1.1.0

  List<double> location = [lat, long];

  final uri = Uri.parse(API.BASE_URL + API.searchAPI).replace(queryParameters: {
    'searchText': searchQuery,
    'userLocation': location.toString(), //here
  });
© www.soinside.com 2019 - 2024. All rights reserved.