Dart - 发送列表的 GET 参数

wei*_*wei 2 http dart flutter

我想在 dart 中使用 http GET 请求发送参数。这里的第一个答案很好地展示了它:如何向 Dart http 请求添加查询参数?

var uri =
    Uri.https('www.myurl.com', '/api/query', queryParameters);
Run Code Online (Sandbox Code Playgroud)

然而,一个主要的问题是 queryParameters 只接受:

Map<String, String>
Run Code Online (Sandbox Code Playgroud)

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

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

post(url, {Map<String, String> headers, body, Encoding encoding})
Run Code Online (Sandbox Code Playgroud)

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

get(url, {Map<String, String> headers})
Run Code Online (Sandbox Code Playgroud)

我还尝试将查询参数直接添加到 url 中,如下所示:

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

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

任何帮助表示赞赏。谢谢

Ric*_*eap 6

事实上,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;
Run Code Online (Sandbox Code Playgroud)

的dynamic可以是一个String或一个Iterable<String>。所以,

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

印刷:

http://www.myurl.com/api/query/?array=value1&array=value2&array=value3
Run Code Online (Sandbox Code Playgroud)