我有一个显示图像的常规FutureBuilder

Future<Image> image;

@override
void initState() {
  super.initState();
  image = loadImage();
}

Widget build(BuildContext context) => FutureBuilder<Image>(
      future: image,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          // using snapshot.data

但是如果我稍后需要将图像更改为不同的本地图像怎么办? 说:

Future<Image> filtered;

合乎逻辑的方法是使用现有image从其他来源加载它,例如:

setState(() {
  image = Future(() => filtered);
});

然而,扑抛出时,错误Future是在返回setSate调用(的setState()回调参数返回一个Future)建议进行异步工作,只与结果设置状态。 这在通常情况下没问题,但是,在这种情况下,状态本身是Future ,而不是它的结果。

#1楼 票数:2

作为参考,解决方案pskink建议:

Future变成Stream

StreamController<Image> image = StreamController<Image>();

最初加载它:

@override
void initState() {
  super.initState();
  loadImage().then((img) => image.add(img));
}

几乎和以前一样使用它:

Widget build(BuildContext context) => StreamBuilder<Image>(
      stream: image.stream,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          // using snapshot.data

并在应显示新图像时使用相同的模式

image.add(filtered));

  ask by Gábor translate from so

未解决问题?本站智能推荐:

4回复

如何在非 Future 类中使用 Future

我是 Flutter 的新手。 我正在尝试解析本地 json 文件(地图列表)以在应用程序的其他部分使用。 因为它是一个 json 解析,所以它需要一个 Future 函数( getJson() ,在下面的例子中)。 此函数解析正确,如第 26 行中的“打印”所示。 I/flutter (64
3回复

什么是 Future 以及如何使用它?

我收到以下错误: A value of type 'Future<int>' can't be assigned to a variable of type 'int' 它可能是另一种类型而不是int ,但基本上模式是 A value of type 'Future<T>
1回复

如何从 Async 函数使用 Future?

我正在尝试从 Async 函数中获取值,该函数返回一个整数,然后用于在我的 UI 中设置小部件的颜色。 异步功能: // Returns a future<int> instead of an int due to async Future<int> getLikeStat
5回复

Flutter 使用 Stream 还是 Future?

我正在使用 Firestore 数据库来存储对象列表。 为了检索它们,我使用 Firestore 包提供的Stream ,如下所示: 它实现了一个abstract类: 在我的 Repository 类中,我这样称呼它: 然后在我的 BloC 中,我调用了存储库: 最后这里是我如何在我
2回复

如何在flutter中使用Future字符串初始化小部件变量的状态

我必须使用存储在 StoredProcedure 中的值初始化小部件变量的状态。 但问题是它无法将该值分配给查询变量并显示错误value to type future string cannot assign to string flutter 我怎样才能做到这一点?
1回复

错误状态:Flutter 中的 Future 已经完成

我在 Big Sur 上使用任何 flutter 命令都会收到此错误: 我唯一改变的是安装 AdGuard,但我完全删除了它。 现在我在尝试不同的方法来修复它后无法摆脱这个错误。 我也有 Bitdefender,但不认为这是相关的,因为我从一开始就安装了这个(这也是我公司的要求,我不能在这里修
2回复

Flutter:Google Maps StateError(错误状态:未来已经完成)

我试图在对话框中显示谷歌地图,第一次它按预期弹出,但是第二次它抛出异常:StateError(错误状态:未来已经完成)。 这是一个总结正在发生的事情的gif 我在对话框中使用rflutter_alert: ^1.0.3 ,在地图中使用google_maps_flutter: ^0.5.21+1
1回复

如何使用Future从FirebaseStorage获取映像?

我有这个功能来获取要显示的图像的URL 然后我想在Builder中使用它: 但是似乎我丢失了一些东西,因为尽管imageUrl已更新,但它仅显示文本“ Sin Foto”。 我究竟做错了什么?