Как создать дубликат ключа в строке запроса Uri в Dart

#google-maps #flutter #dart #google-maps-api-3 #google-maps-markers

#google-карты #flutter #dart #google-карты-api-3 #google-карты-маркеры #google-maps-api-3

Вопрос:

Приложение: статический API карт Google

Чтобы добавить несколько маркеров, в документах говорится, что нам просто нужно установить несколько значений markers строки запроса

Несколько маркеров могут быть помещены в один и тот же параметр markers, если они имеют одинаковый стиль; вы можете добавить дополнительные маркеры разных стилей, добавив дополнительные параметры markers.

Я попытался использовать Uri lib следующим образом:

  final url = new Uri(
      scheme: 'https',
      host: 'maps.googleapis.com',
      path: 'maps/api/staticmap',
      queryParameters: {
        'markers' : 'color:blue|label:C|1.015,1.054',
        'markers' : 'color:red|label:C|1.012,1.057',
      },
    );
 print(url.toString());
  

Но дарт этого не допустил бы. Есть ли другой метод?

Что происходит, так это то, что он показывает только один маркер. (Первое)

Комментарии:

1. можешь попробовать : вместо = после 'markers' ?

2. Кстати, для удобства поиска я бы рекомендовал изменить заголовок вашего вопроса, чтобы он был о том, как дублировать ключ в Uri запросе, а не о том, как создать дубликат ключа на карте. В противном случае вы попадаете в классическую проблему X-Y, когда вы преждевременно остановились на решении вместо решения своей конечной проблемы.

3. @jamesdlin Хорошая идея, я обновил заголовок

Ответ №1:

A Map не может содержать дубликатов ключей. Тем не менее, Uri конструктор поддерживает генерацию строк запросов с дубликатами ключей. Из документации для Uri конструктора:

При queryParameters использовании запрос строится на основе предоставленной карты…. Значение на карте должно быть либо строкой, либо Iterable набором строк, где последнее соответствует нескольким значениям для одного и того же ключа.

Итак, вы могли бы сделать:

 final url = Uri(
  scheme: 'https',
  host: 'maps.googleapis.com',
  path: 'maps/api/staticmap',
  queryParameters: {
    'markers': [
      'color:blue|label:C|1.015,1.054',
      'color:red|label:C|1.012,1.057'
    ],
  },
);
print(url.toString());
  

который печатает:

 https://maps.googleapis.com/maps/api/staticmap?markers=color:blue|label:C|1.015,1.054amp;markers=color:red|label:C|1.012,1.057