颤振初学者在这里;我收到此错误:type 'Future<dynamic>' is not a subtype of type 'String'
从 firebase 存储中获取下载 url 的函数
_getImageUrl(var fileName) async {
print(fileName);
final StorageReference ref = FirebaseStorage.instance.ref().child('categories/' + fileName);
Uri downloadUrl = await ref.getDownloadURL();
var url = downloadUrl.toString();
return url;
}
我在哪里调用该函数
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,
),
你不能使用async/await
当从a返回时build
方法(或builder
关闭)。每当您在构建小部件树时使用异步时,最好使用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();
}
),
或者,你could use a StatefulWidget
为此,但它更多的是样板。有更多详细信息和实时示例,请访问https://flutterigniter.com/build-widget-with-async-method-call/ https://flutterigniter.com/build-widget-with-async-method-call/如果你有兴趣的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)