forEach 会在 Dart 的广播流中泄漏吗?

Will forEach leak in a Dart's Broadcast Stream?

我有一个 StreamController.broadcast(),我在创建时将其 Steam 传递给我的许多 Flutter Widget。

因为每次 build 我都会重新创建这些小部件,我想知道在这些小部件中使用 Stream.forEach() 是否会导致内存泄漏,因为 forEach() 没有机制来关闭 Subscription。我想知道这些 Subscription 对象是否不会被清理,或者即使 Widgets 本身不会超出内存。

是的,会的。

侦听器一直保持到流结束或发出错误为止。

因此,如果您在 build 中执行 Stream.forEach,那么对小部件的任何重建都会添加一个侦听器,而不会删除之前的侦听器。