StreamBuilder与flutter_firebase有第二个小部件构建空值(图像消失) &g



我设法在页面上使用streambuilder显示来自firestore的图像,但问题是图像消失(我得到一个空snapshot.data值),如果我回到最后一页并回来。

这是我的代码。如何使快照数据持久保存,以便在小部件重新构建时图像保留在那里而不会消失?
Container(child: Column(
children: [
Text('    Certifications',
Container(child: StreamBuilder(
stream: certificates,
builder: (context, snapshot) {
return !snapshot.hasData
? Center(child: Container(
child: Center(child: Text(
'No images yet'))))
: Container(
child: GridView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
url = snapshot.data.documents[index].get('url');
return Container(child: FadeInImage
.memoryNetwork(fit: BoxFit.cover,
placeholder: kTransparentImage,
image: url),
),
);
}),
);
}),
),

流是异步的。这意味着StreamBuilder不会得到旧的快照,只有新的未来快照。这是你的问题。

当您的小部件被重新构建时,它正在订阅一个已经有事件的流。是的,您可能认为快照中的数据应该是最后一个事件值,但事实并非如此。它将是null,直到一个新的事件被推送到您的certificates流。

因此,一个解决方案是为加载证书的服务存储初始API请求的值,并使您可以在StreamBuilder的initialData属性中使用该值。

我将这样组织它:

StreamBuilder(
stream: certificateService.stream,
initialData: certificateService.value, // <-----
builder: ...
)

希望这能给你指明正确的方向。

最新更新