我有哪些循环繁重的功能 X 次。如果我将此流放在 StreamBuilder 中,则 Stream 将永远一次又一次地运行,但我只需要它运行一次(执行 X 个循环)并停止。
为了解决未来函数的这个问题,我使用了 AsyncMemoizer,但我不能将它用于流函数。
我该怎么做?
我有哪些循环繁重的功能 X 次。如果我将此流放在 StreamBuilder 中,则 Stream 将永远一次又一次地运行,但我只需要它运行一次(执行 X 个循环)并停止。
为了解决未来函数的这个问题,我使用了 AsyncMemoizer,但我不能将它用于流函数。
我该怎么做?
如果你确定,你的小部件不应该被重建,而不是像下面的代码那样尝试。_widget将在initState 中创建一次,然后将在 build 方法中返回“缓存”小部件。
class MyStreamWidget extends StatefulWidget {
@override
_MyStreamWidgetState createState() => _MyStreamWidgetState();
}
class _MyStreamWidgetState extends State<MyStreamWidget> {
StreamBuilder _widget;
// TODO your stream
var myStream;
@override
void initState() {
super.initState();
_widget = StreamBuilder(
stream: myStream,
builder: (context, snapshot) {
// TODO create widget
return Container();
})
}
@override
Widget build(BuildContext context) {
return _widget;
}
}
正如 Rémi Rousselet 所建议的,StreamBuilder 应该用于状态管理良好的 Widget Tree。我在 Stream 中调用setState((){})
,这导致 UI 每次都更新,使 StreamBuilder 重建,因此重新启动流。