@Alexandre Beaudet réponse est bonne, mais ne donne pas beaucoup de contexte sur ce qui se passe.
Lorsque vous appelez loadString
, c'est en fait un appel de méthode asynchrone. Vous pouvez le dire, car il renvoie à un Future<value>
plutôt que juste un value
. Cela signifie qu'il n'est pas immédiatement à la suite de la Chaîne, mais à un certain moment dans l'avenir.
Il existe deux principales façons de traiter avec l'asynchronicité dans Dart; la première étant d'utiliser async
et await
, le second étant d'utiliser le terme directement. Voir la dart guide sur la Programmation Asynchrone.
Si vous utilisez future.then
directement, vous pouvez le faire à partir d'une fonction normale (c'est à dire à partir de initState etc). Il vous suffit de spécifier le rappel, et dans le rappel de quoi faire avec le résultat.
void printDailyNewsDigest() {
final future = gatherNewsReports();
future.then((news) => print(news));
}
Si vous souhaitez utiliser await
comme @Alexandre a illustré, vous devez marquer la fonction que vous utilisez, car async
, c'est à dire:
Future<Void> printDailyNewsDigest() async {
String news = await gatherNewsReports();
print(news);
}
Si vous substituez une fonction (c'est à dire initState) vous devez également vous assurer de ne pas modifier la valeur de retour. Qui devrait se faire attraper par dart 2 en tapant la plupart du temps, mais nulle -> Avenir ne semble pas l'être.
Une dernière chose à noter - si vous utilisez le résultat de données afin de créer des widgets, vous aurez probablement envie de regarder à l'aide d'un FutureBuilder.