gpt4 book ai didi

Flutter - StreamBuilder 构建器函数在导航器弹出时运行

转载 作者:IT王子 更新时间:2023-10-29 06:56:28 25 4
gpt4 key购买 nike

我有一个名为 RootContainer 的小部件,它接收一个 Widget child 并将其包装在 StreamBuilder 中:

class RootContainer extends StatelessWidget {
final Widget child;

RootContainer({this.child});

@override
Widget build(BuildContext context) {
return StreamBuilder<OverlayAlert>(
stream: ApiService.ThrottledException.stream,
builder: (context, snapshot) {

if (snapshot.connectionState == ConnectionState.active) {
Future.delayed(Duration.zero, () => showAlert(context, snapshot));
}

return this.child;
},
);
}

void showAlert(BuildContext context, snapshot) {
print("showing dialog");
showDialog(
context: context,
builder: (context) => OverlayAlertDialog(snapshot),
);
}

当发生错误时,我向流 ApiService.exception.stream 添加一个新值,这会触发 StreamBuilder 构建器,然后它会打开一个对话框。

这是当前的小部件树:

enter image description here

当我想弹出导航器时问题就开始了,StreamBuilder.builder 再次构建!

  1. 我认为这可能会发生,因为正在重建 RootContainer,但是在 StreamBuilder 之前放置一个 print 只会导致一张。

  2. 我尝试.listen 流,当我弹出导航器时流没有触发,所以我可以确认 ApiService.ThrottledException 没有任何问题。流

  3. 弹出导航器时的快照(数据)等于上次发射。

您可以在下面的演示中看到,每当我按下后退按钮时,对话框都会再次弹出:

enter image description here

当我按下后退按钮时,什么会导致 StreamBuilder 自行重建?

最佳答案

我必须更改 RootContainer 以扩展 StatefulWidget 而不是 StatelessWidget

我不知道幕后发生了什么,但它有效!任何解释都会很好。

关于Flutter - StreamBuilder 构建器函数在导航器弹出时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782005/

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