首页 > 解决方案 > 如何从未来获取字符串在颤振?

问题描述

我有一个奇怪的问题。我需要 a Future<String>as的值String来显示带有CachedNetworkImage. 因为我必须等待来自 Firebase Storage 的 downloadUrl,所以我发现无法将它用作普通字符串。

这是我需要值的小部件

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 存储的下载 url 的字符串

Future<String> getDownloadUrl(ref) async {
    final StorageReference storage = FirebaseStorage().ref().child(ref);
    final url = await storage.getDownloadURL();

    return url.toString();
}

因为我肯定要等待getDownloadUrl()我没有机会将值返回为String. 但我需要它作为String. 否则我得到一个错误。

你将如何解决这个问题?

标签: flutterdart

解决方案


AFutureBuilder将根据Future. 您所要做的就是检查它是否有数据,然后构建图像。

  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();
      },
    );
  }

推荐阅读