Dart et Flutter http.get "String can't be assigned to the parameter type Uri"

Bonjour à tous,

J’ai débuter le cours 4.2 - Webservices et communication HTTP et la partie pratique ne fonctionne pas chez moi… Lorsque je renseigne:

Future<String> _chargerDonnees() async {
    final response =
        await http.get('https://jsonplaceholder.typicode.com/users/1');
  }

une erreur est affichée…

The argument type ‹ String › can’t be assigned to the parameter type ‹ Uri ›.dartargument_type_not_assignable

Je ne comprends pas pourquoi il me parle de Uri.dart…

Je suis avec http: ^0.13.3 sous flutter 2.0.6

Merci à vous.

En lisant la documentation officielle, j’ai trouvé la réponse qui fonctionne mais je ne la comprends pas…

var url = Uri.parse("https://jsonplaceholder.typicode.com/users/1");
  Future<String> _chargerDonnees() async {
    final response = await http.get(url);
    if (response.statusCode == 200) {
      return response.body;
    } else
      Exception("Erreur de chargement des données");
  }

Est-ce que quelqu’un peut me l’expliquer?

Merci!

Il semble qu’à partir de la version 0.13 du package HTTP ils n’acceptent plus les chaînes de caractères comme paramètres de la plupart des fonctions.
C’est expliqué ici : Liste des modifications de la lib http

  • Breaking All APIs which previously allowed a String or Uri to be passed now require a Uri.

Pas sympa de faire des breaking changes sur une révision mineure…

Donc apparemment maintenant tu dois obligatoirement encapsuler ton adresse dans un objet Uri comme tu l’as vu dans ton exemple : Uri.parse("https://www")
Attention : si l’url que tu lui donnes n’est pas valide, la fonction parse lance une exception (doc).

Une fois que tu as ton objet Uri qui représente une adresse, il te suffit de le passer à ton http.get() comme tu le faisais avant pour les url au format String

En tous cas merci de l’info, je viens de mettre un lien dans le cours pour expliquer ce changement à ceux qui ne l’avaient pas encore vu.

Happy coding!

1 J'aime

Merci pour l’explication! C’est un peu plus clair pour moi.

1 J'aime