2

我有哪些循环繁重的功能 X 次。如果我将此流放在 StreamBuilder 中,则 Stream 将永远一次又一次地运行,但我只需要它运行一次(执行 X 个循环)并停止。

为了解决未来函数的这个问题,我使用了 AsyncMemoizer,但我不能将它用于流函数。

我该怎么做?

4

2 回答 2

1

如果你确定,你的小部件不应该被重建,而不是像下面的代码那样尝试。_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;
  }
}
于 2019-06-29T19:23:50.413 回答
0

正如 Rémi Rousselet 所建议的,StreamBuilder 应该用于状态管理良好的 Widget Tree。我在 Stream 中调用setState((){}),这导致 UI 每次都更新,使 StreamBuilder 重建,因此重新启动流。

于 2019-06-29T21:47:17.460 回答