web-dev-qa-db-fra.com

Flutter - Comment puis-je renvoyer une erreur d'un Future in Dart?

Dans mon application Flutter, j'ai un futur qui gère les requêtes http et retourne les données décodées. Mais je veux pouvoir envoyer une erreur si le status code != 200 Qui peut être obtenu avec le gestionnaire .catchError().

Voici l'avenir:

Future<List> getEvents(String customerID) async {
  var response = await http.get(
    Uri.encodeFull(...)
  );

  if (response.statusCode == 200){
    return jsonDecode(response.body);
  }else{
    // I want to return error here 
  }
}

et quand j'appelle cette fonction, je veux pouvoir obtenir l'erreur comme:

getEvents(customerID)
.then(
  ...
).catchError(
  (error) => print(error)
);
14
Kingsley Kbc Comics

Vous pouvez utiliser throw:

Future<List> getEvents(String customerID) async {
  var response = await http.get(
    Uri.encodeFull(...)
  );

  if (response.statusCode == 200){
    return jsonDecode(response.body);
  }else{
    // I want to return error here 
       throw("some arbitrary error"); // error thrown
  }
}
10
anmol.majhail

Utilisez return si vous voulez que l'erreur soit interceptée dans catchError()

Utilisez throw si vous souhaitez que l'erreur soit détectée dans try/catch.

return Future.error("This is the error", StackTrace.fromString("This is its trace"));
15
CopsOnRoad