我有一个奇怪的问题。我需要Future<String>
的值作为String
来显示具有CachedNetworkImage
的图像。因为我必须等待来自Firebase Storage的下载URL,所以我找不到将其用作普通字符串的方法。
这是我需要值的小工具
Container(child: Obx(
() {
return CachedNetworkImage(
imageUrl: _getImage(), // Here I need the value as String
height: Get.height,
fit: BoxFit.cover);
},
))
这是我的_getImage()
函数
Future<String> _getImage() async {
var url = return await MyStorage().getDownloadUrl(url);
return url;
}
getDownloadUrl()
仅返回一个字符串,该字符串带有Firebase Storage的下载url
Future<String> getDownloadUrl(ref) async {
final StorageReference storage = FirebaseStorage().ref().child(ref);
final url = await storage.getDownloadURL();
return url.toString();
}
因为我肯定要等待getDownloadUrl()
,所以我没有机会将值返回为String
。但我需要它作为String
。否则我会出错。
你将如何解决这个问题?
FutureBuilder
将根据Future
的状态构建UI。你所要做的就是检查它是否有数据,然后构建图像。
Future<String> myFutureString() async {
await Future.delayed(Duration(seconds: 1));
return 'Hello';
}
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: myFutureString(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Container(
child: Text(snapshot.data),
);
}
return CircularProgressIndicator();
},
);
}