我有一个名为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构建器,然后打开一个对话框。这是当前的小部件树:
当我想弹出导航器时,问题就开始了,
StreamBuilder.builder
再次生成了!RootContainer
,但是在print
之前放置一个StreamBuilder
只会打印一张。 .listen
添加到流中,并且当我弹出导航器时,流没有触发,因此我可以确认ApiService.ThrottledException.stream
没有问题。 您可以在以下演示中看到,每当我按下“后退”按钮时,对话框就会再次弹出:
当我按下“后退”按钮时,什么可能导致
StreamBuilder
自身重建? 最佳答案
我不得不更改RootContainer
来扩展StatefulWidget
而不是StatelessWidget
。
我不知道幕后发生了什么,但是它有效!任何解释都很好。
关于flutter - Flutter-弹出导航器时运行StreamBuilder构建器功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56782005/