为啥使用 InheritedWidget 而我们可以使用 Broadcast Streams | StreamBuilder 和静态变量

Posted

技术标签:

【中文标题】为啥使用 InheritedWidget 而我们可以使用 Broadcast Streams | StreamBuilder 和静态变量【英文标题】:Why use InheritedWidget while we can use Broadcast Streams | StreamBuilder and Static Variables [closed]为什么使用 InheritedWidget 而我们可以使用 Broadcast Streams | StreamBuilder 和静态变量 【发布时间】:2018-10-02 03:39:24 【问题描述】:

为什么要使用 InheritedWidget 而我们可以使用广播流 | StreamBuilder 和静态变量?

虽然我们可以拥有一个简单而干净的架构,但我们为什么还要为 redux、作用域模型等而烦恼?

【问题讨论】:

【参考方案1】:

Streams/Sink 绝对是存储状态的绝佳选择。有一些现有的架构,例如 BLoC 使用它们很多。

但是,Streams 也不能完全取代 InheritedWidgetInheritedWidget 具有很酷的能力,可以覆盖它的内容仅用于屏幕的一部分。 一个很酷的应用是Theme

一般来说,Streams 存储业务逻辑很酷。但是当你需要存储 UI 逻辑时,InheritedWidgets 占了上风。

【讨论】:

谢谢,我不是在找替代品,我在找一个简单干净的架构 当我使用 StreamBuilder 时,我实际上只覆盖了屏幕一部分的内容,我错了吗? 你错了。 InheritedWidget 将信息传递给它的孩子。虽然流在小部件内部。所以在InheritedWidget 的情况下,其他小部件可能会产生影响。虽然使用流,但它们不能 流不在小部件内部,流是广播的并且对应用程序是全局的。不需要向下传递任何东西,只需将状态存储在全局/静态变量中 但是你们共享同一个流。当您实例化多个继承的小部件时。试着用流重现Theme,你会很容易理解

以上是关于为啥使用 InheritedWidget 而我们可以使用 Broadcast Streams | StreamBuilder 和静态变量的主要内容,如果未能解决你的问题,请参考以下文章

InheritedWidget 混淆

一文搞懂InheritedWidget局部刷新机制

flutter系列InheritedWidget介绍

提供者与 InheritedWidget

为啥 Swift 2 偏爱强制解包而不是可选项?

flutter 起步走flutter共享数据利器,InheritedWidget原理探秘