Flutter Uri.https не выдает никаких ошибок

О моей проблеме особо нечего сказать.

Код:

Future<bool> getThatUrl(cid) async { //cid = 0, for example
  Map<String, dynamic> parameters = Map();
  String email = '[email protected]';
  parameters['email'] = email;
  parameters['problematic_id'] = cid;
  print(parameters); // prints: {email: [email protected], problematic_id: 0}
  var uri = Uri.https('mywebpage.com', '/page.php', parameters);
  print(uri); // prints: 
}

Проблема в том, что uri (не генерируется? и) не печатается, пока я не удалю parameters['problematic_id'] = 0. Если я его удалю, он напечатает https://mywebpage.com/page.php?email=anymail%40anymail.com, что правильно, но мне это problematic_id=0 тоже нужно.

Я пробовал использовать только один параметр, но если это parameters['problematic_id'] = 0, то все равно не работает.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

На самом деле это запланированное поведение.

Я вижу, что при внутренней реализации каждый value из queryParameters должен быть либо Iterable, либо String? (String или null), а вместо этого вы передаете int (cid = 0).

Поскольку queryParameters в любом случае рассматривается как String, вам не нужно беспокоиться о типе. Итак, чтобы решить эту проблему, лучше просто вызвать toString() или преобразовать cid в строку.

Вот код решения:

Uri getUri(String email, int cid) {
  Map<String, dynamic> parameters = {
    'email': email,
    'problematic_id': "$cid"
  };
  print(parameters);
  var uri = Uri.https('mywebpage.com', '/page.php', parameters);
  print(uri);
  return uri;
}

void main() {
  final cid = 0;
  final email = '[email protected]';

  getUri(email, cid);
}

Здесь строка номер 4 «$cid» преобразует cid в строку, тем самым решая проблему.

Надеюсь это поможет.

Редактировать:

  • Конструктор Uri упоминает:

Значение на карте должно быть нулевым, строковым или итерируемым струны.

(Спасибо @jamesdlin за комментарий)

Документация Uri немного сбивает с толку, но соответствующая документация взята из конструктора Uri: «Значение в карте должно быть либо null, строкой, либо Iterable строк». Так что да, так и задумано.

jamesdlin 11.04.2024 06:28

Я получил два правильных решения, но ваш ответ более четко объясняет проблему и дает решение в виде "$cid" я раньше не замечал

Sisalik 11.04.2024 13:56

попробуйте явно преобразовать cid в строку перед добавлением параметров.

parameters['problematic_id'] = cid.toString();

Это также правильное решение, но оно дает меньше объяснений, почему это происходит.

Sisalik 11.04.2024 13:57

Другие вопросы по теме