Мне нужно сделать запрос HTTP GET, чтобы получить некоторые отфильтрованные данные. Мой API принимает 3 массива параметров, и в моем коде у меня есть 3 разных списка параметров. Можно ли создать карту, которая содержит параметры с одинаковым ключом и разными значениями из 3 списков int?

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

0
E.Benedos 25 Фев 2020 в 23:30

2 ответа

Лучший ответ
  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);
1
E.Benedos 28 Фев 2020 в 04:31

Попробуйте qryParams.add(Map.fromIterable(bikeTypeIds, key: (e) => 'bikeTypeId', value: (e) => '$e'))

Что обеспечит Map<String, String>, который требуется Uri.http. В своем коде вы пытаетесь создать Map<String, int> ... Обратите внимание на '$e'

0
Brian Gorman 26 Фев 2020 в 02:52