Объявление Uri завершается ошибкой, если параметры не являются трепетом строк

#flutter #uri

Вопрос:

Я обновляю свой код до последних версий пакетов Flutter/Dart и вижу, что теперь http-запросы нужно выполнять, передавая a Uri вместо a String .

 final String request =
       'https://wft-geo-db.p.rapidapi.com/v1/geo/locations/$isoLocationDb/nearbyCities?minPopulation=150000amp;radius=30';
 

Конечно, я мог бы просто использовать

 var response = await get(Uri.parse(request), headers: headers);
 

что работает, как и ожидалось, но я хотел создать Uri, чтобы новый код был

 Map<String, dynamic> parameters = {'minPopulation': 150000, 'radius': 30};

    Uri uri = Uri.https('wft-geo-db.p.rapidapi.com',
        '/v1/geo/locations/$isoLocationDb/nearbyCities', parameters);

    print('∞∞∞∞∞∞∞∞∞∞  GetCityDb 1st Uri is : $uri'); // No prints

    var headers = {
      'x-rapidapi-host': 'wft-geo-db.p.rapidapi.com',
      'x-rapidapi-key': apiKey,
    };

    var response = await get(uri, headers:headers);
 

но затем Uri объявление идет неправильно ( я не печатаю его), и метод возвращает an int вместо a List<String> (получил это из моей ошибки блока int is not a subtype of List<String> .

Это приводит к тому, что изменение parameter значений на String решает проблему.

Не следует предполагать, что вы принимаете числа, как это есть Map<String, dynamic> ? Не Uri строжирует ли эти значения?

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

1. «Не Uri строит эти значения?» Нет, это не так. Документация Uri должна быть лучше , но документация для Uri конструктора объясняет: «При queryParameters использовании запрос строится на основе предоставленной карты…. Значение на карте должно быть либо строкой, либо Iterable числом строк….»

2. а ну понятно. Я этого не видел. Овации