Flutter débutant ici; J'obtiens cette erreur: type 'Future
Fonction qui récupère l'URL de téléchargement à partir du stockage Firebase
child: Image(
image: AdvancedNetworkImage(
_getImageUrl(menuItem['image'].toString()),
timeoutDuration: Duration(minutes: 1),
useDiskCache: true,
cacheRule: CacheRule(maxAge: const Duration(days: 7)),
),
height: mediaQuery.size.width * 0.22,
width: mediaQuery.size.width * 0.22,
),
3 Réponses :
Votre obtenir l'URL de l'image doit renvoyer un Future.
maintenant j'obtiens cette erreur 'Le type d'argument' Future
utilisez wait avant d'appeler cette fonction
Vous ne pouvez pas utiliser async / await lors du retour d'une méthode build (ou d'une fermeture builder ). Chaque fois que vous avez asynchrone lors de la construction de l'arborescence des widgets, il est préférable d'utiliser un FutureBuilder :
child: FutureBuilder<String>(
future: _getImageUrl(menuItem['image'].toString()),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Image(
image: AdvancedNetworkImage(
snapshot.data,
timeoutDuration: Duration(minutes: 1),
useDiskCache: true,
cacheRule: CacheRule(maxAge: const Duration(days: 7)),
),
height: mediaQuery.size.width * 0.22,
width: mediaQuery.size.width * 0.22,
);
}
return CircularProgressIndicator();
}
),
Sinon, vous pouvez utiliser un StatefulWidget pour cela, mais c'est beaucoup plus passe-partout. Vous trouverez plus de détails et un échantillon en direct sur https://flutterigniter.com/build -widget-with-async-method-call / si vous êtes intéressé.
Premièrement, Flutter renvoie un Future lorsque les fonctions asynchrones ne sont pas terminées, une fois terminé, il renverra des données de type type code >. L'erreur que vous faites est d'appeler un asynchrone à partir d'une fonction synchrone . Bien que dart exécute les fonctions de manière asynchrone (vous pouvez le valider en imprimant l'url depuis la fonction asynchrone ).
Mais l'endroit d'où vous l'appelez n'attend pas pour que la fonction asynchrone se termine.
J'espère que c'est clair maintenant.
Pour plus de clarté, visitez Programmation asynchrone < / p>
Est-ce que cela répond à votre question? Qu'est-ce qu'un avenir et comment l'utiliser? < / a>