gpt4 book ai didi

flutter - 读取后如何从StreamBuilder中删除数据?

转载 作者:IT王子 更新时间:2023-10-29 07:10:54 24 4
gpt4 key购买 nike

我想在读取后从我的流中删除数据。
基本上我想要与 Go 中的 channel 相同的系统。

因此,如果我添加 5、3 和 2,我的流将包含 5、3 和 2。
当我开始阅读时,我得到 5,我的流现在包含 3 和 2 等等...

这可能吗?

编辑:这是我的一些代码问题。
我使用 StreamBuilder 来接收数据。当我更改状态时,它会再次触发我的功能,就像我刚刚接收数据一样。

child: StreamBuilder<Tag>(
stream: widget.tagStream,
initialData: Tag(),
builder: (BuildContext context, AsyncSnapshot<Tag> snapshot) {
/// This should be trigger only when I receive data
if (mapController.ready && snapshot.hasData) {
tag = snapshot.data;
mapController.move(
LatLng(tag.position.latitude, tag.position.longitude),
mapController.zoom);
}
return RubberBottomSheet(...);
),

这里是一些上下文:
我有一张 map ,上面有代表对象的图标。当我单击一个图标或在搜索栏中搜索相关项目时,会出现一个 RubberBottomSheet 以显示有关该对象的信息。为此,我使用了 StreamBuilder,所以我只需要将单击或搜索的对象放入其中以使我的橡皮出现并填充。我还需要将我的图标居中以让用户知道对象在哪里。我的问题是,当我打开或关闭键盘或使用 setState(例如,用于更改搜索栏的外观)时,它会自动触发 StreamBuilder,就像它接收到新数据一样。

对不起,我应该从这里开始......

最佳答案

Amine的回答好像是最好的,不过我也想分享一下我的解决方法,也许对一些人有帮助。

在我执行完我的代码后,我将一个空对象传递到我的 Stream。在执行我的代码之前,我只需要验证我的对象不为空,一切都很顺利。

builder: (BuildContext context, AsyncSnapshot<Tag> snapshot) {
if (mapController.ready &&
snapshot.hasData &&
snapshot.data.mobile.nid != 0) {
tag = snapshot.data;
... /// My code
widget.tagStream.sink.add(Tag());
}

关于flutter - 读取后如何从StreamBuilder中删除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com