我现在至少有一个模糊的想法,如何在我的应用程序中使用BLoC、Stream Builder和Inherited Widget(或Model)(对我来说不算特别,但也花费了一些时间)。但是当我尝试使用Scoped Model时,我陷入了某种存在危机:我感觉它们大部分可以做相同的事情,或者至少可以通过它们实现相同的表面结果,但我不具备理解何时以及为什么一个比另一个更好所需要的能力。
我现在至少有一个模糊的想法,如何在我的应用程序中使用BLoC、Stream Builder和Inherited Widget(或Model)(对我来说不算特别,但也花费了一些时间)。但是当我尝试使用Scoped Model时,我陷入了某种存在危机:我感觉它们大部分可以做相同的事情,或者至少可以通过它们实现相同的表面结果,但我不具备理解何时以及为什么一个比另一个更好所需要的能力。
简而言之:如果你的应用程序较小,则使用 scoped models,因为bloc往往会使其复杂化;如果您有大型应用程序,则使用 bloc。
请参见此文章以获取详细说明:bloc vs scoped_model
这是Remi Rousselet提供的有关 stream builder 和 inherited widget 的良好比较:https://dev59.com/Z6rka4cB1Zd3GeqPjc1C#49958864
Streams/Sink绝对是存储状态的绝佳方式。有一些现有的架构,例如BLoC,它们广泛使用了它们。
但是,流并没有完全取代 InheritedWidget
。 InheritedWidget
具有仅覆盖部分屏幕内容的功能。这种能力的一个很酷的应用是 Theme
。
一般来说,Streams
用于存储业务逻辑。但是当您需要存储UI逻辑时,InheritedWidgets
更优秀。
StreamBuilder
和InheritedModel
更通用。BLoC、ScopedModel和Redux更具体化。你可能可以将Redux与BLoC或ScopedModel结合起来,但正如我所说,我还没有仔细研究这两个。 - Günter Zöchbauer