您是否必须在 Flutter 中手动处理来自流提供者的流?

Joh*_*ohn 6 flutter flutter-provider

我在提供程序包的官方文档中找不到此内容 ,streamprovider 是否自动处理它们提供的流的处理,还是必须手动执行此操作?如果是这样,在哪里处理使用流提供程序公开的流的最佳实践是什么?

Wes*_*324 5

不,使用 StreamProvider 时不需要手动清理流。

StreamProvider 扩展了 DeferredInheritedProvider,其文档指出,当 DeferredInheritedProvider 从树中删除时,正在侦听的对象将被自动释放。

实际上,假设您不是自己创建 Stream,那么在清理实际 Stream 方面您无能为力,如GitHub 评论中所述。提供 Stream 的库应该清理 Stream。例如,如果我正在从 Firebase Auth 插件监听有关用户登录和退出我的应用程序的流,则该插件有责任清除该流。

但是,侦听 Stream 的事物(在本例中为 StreamProvider)确实有责任清理其对该 Stream 的 StreamSubscription,StreamProvider 就是这样做的。

您可以在此处的Provider 源代码中看到,在创建 DeferredStartListening 实例时,会针对流调用listen,该流返回 StreamSubscription。在该方法的末尾,针对该订阅调用取消,从而清除 StreamSubscription。