我想在 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。
如有任何帮助,我们将不胜感激。 谢谢
事实上,
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
您还可以在列表本身上使用 .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
});