【问题标题】:Do you have to manually dispose streams from a streamprovider in Flutter?您是否必须在 Flutter 中手动处理来自 streamprovider 的流?
【发布时间】:2020-07-01 19:33:44
【问题描述】:

我在提供程序包的官方documentation 中找不到这个,streamprovider 是自动处理他们提供的流还是你必须手动处理?如果是这样,在哪里处理使用流提供程序公开的流的最佳做法是什么?

【问题讨论】:

  • 你最终找到答案了吗?

标签: flutter flutter-provider


【解决方案1】:

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

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

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

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

您可以在 Provider 的源代码here 中看到,在创建 DeferredStartListening 的实例时,会针对流调用 listen,该流返回一个 StreamSubscription。在方法结束时,对该订阅调用取消,这会清除 StreamSubscription。

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多