【问题标题】:Essential difference between using StreamBuilder and StreamProvider使用 StreamBuilder 和 StreamProvider 的本质区别
【发布时间】:2020-06-08 09:27:03
【问题描述】:

请有人解释使用 StreamBuilder 小部件和 StreamProvider(提供程序包)之间的本质区别(缺点/优点)。为什么以及何时需要使用 StreamProvider

附:此外,为什么我需要这么多其他提供者(如 ListenableProvider、ChangeNotifierProvider 等)?除了命名之外,它们还有什么优势?我可以使用 Provider 构造函数来创建要提供的任何类型的数据,对吧?

【问题讨论】:

  • 主要区别是你不需要关心StreamProvider的事件,而StreamBuilder提供者需要你有条件地检查当前Snapshot的状态(ConnectionState.done, .waiting, hasError , hasData 等)
  • @GaurisJavier,我不同意。 StreamBuilder/StreamProvider 都有 builder 方法和相应的参数 snapshoptobject。并且为了避免nullStreamBuilder 中崩溃,您需要检查snapshot.hasData,但在StreamProvider 中,您需要检查object != null 是否。所以这不是一个案例。
  • 构建器方法有不同的签名,如果你注意到 StreamProvider 一个,没有 Snapshot 参数,而是有一个错误构建器,转换构建器。 StreamProvider 不知道哪个状态流是(ConnectionState.done、.waiting)。我说过使用 StreamProvider 你不需要关心事件,这是真的。你没有它的参数快照。而且您还有参数 updateShouldNotify 用于检查数据何时有效,不只是是否为空。
  • 哦,我从另一边问。什么时候可以使用 StreamProvider? StreamProvider 在 StreamBuilder 之前的优势是什么?如何定义我需要 StreamBuilder 或 StreamProvider 的时刻?原则上这是我的问题。附:此外,为什么我需要这么多其他提供者(如 ListenableProvider、ChangeNotifierProvider 等)?除了命名之外,它们还有什么优势?我可以使用 Provider 构造函数来创建要提供的任何类型的数据,对吧?
  • 确切地说,您可以通过 Provider 上下文 (Provider.of) 访问流,如果您没有非常深的小部件树,则没有太大区别。但是当你有像这样的非常深的小部件树时:StreamProvider -> MyCustomParent -> AnotherChildWidget -> AnotherChildWidgetDeeper - Provider.of(context)。否则,使用 StreamBuilder,您需要将 Snpashot 数据作为构造器引用传递,直到最深的孩子。难以维护的东西。

标签: flutter dart provider stream-builder


【解决方案1】:

StreamBuilder 用于您确定只需要在同一个小部件上的流。如果您的应用程序正在增长,请使用StreamProvider,通过您的应用程序小部件传递此流数据会变得混乱。

StreamProvider是比StreamBuilder更完整的解决方案:

您还可以阅读这篇文章 "Making sense of all those Flutter Providers" 以了解每种主要 Provider 类型的用途,并观看 this video 解释从使用 StreamBuilderStreamProvider 的演变及其好处。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多