如何修复类型“Future”不是“String”类型的子类型 Flutter

2024-01-15

颤振初学者在这里;我收到此错误: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(使用前将#替换为@)

如何修复类型“Future”不是“String”类型的子类型 Flutter 的相关文章

随机推荐