首页 > 解决方案 > Http从不同列表中获取查询参数

问题描述

我需要发出一个 HTTP GET 请求来检索一些过滤后的数据。我的 API 接受 3 个参数数组,在我的代码中我有 3 个不同的参数列表。是否可以创建一个包含来自 3 个 int 列表的具有相同键和不同值的参数的 Map?

Future<List<Tour>> fetchFilteredTours(List<int> bikeTypeIds,
      final List<int> difficultyIds, final List<int> locationIds) async {
    final Map<String, String> qryParams = {
    };

    //How to create my qryParams with all arrays values?
    //Something like
    qryParams.add(Map.fromIterable(bikeTypeIds, key: (e) => 'bikeTypeId', value: (e) => e));

    final response = await http
        .get(Uri.http('myDomain', '/api/search/tours', qryParams));

    return parseResponse(response);
  }

期望的结果是{{protocol}}://{{url}}/api/search/tours?bikeTypeId=1&bikeTypeId=2&difficultyId=1&locationId=1

标签: flutterdart

解决方案


  final keys = ['bikeTypeId', 'difficultyId', 'locationId'];

  final values = [bikeTypeIds, difficultyIds, locationIds].map(
    (ids) => ids.map((e) => e.toString()),
  );

创建一个 Map 实例,将给定的键与值相关联。

  final qryParams = Map.fromIterables(keys, values);

从其组件创建一个新的 URI。

  Uri(scheme: 'https', host: 'myDomain', path: 'api/search/tours', queryParameters: qryParams);

推荐阅读