Scoped Model、BLoC模式、StreamBuilder和Inherited Widget(或Model),我应该选择哪一个并为什么?

19

我现在至少有一个模糊的想法,如何在我的应用程序中使用BLoCStream BuilderInherited Widget(或Model)(对我来说不算特别,但也花费了一些时间)。但是当我尝试使用Scoped Model时,我陷入了某种存在危机:我感觉它们大部分可以做相同的事情,或者至少可以通过它们实现相同的表面结果,但我不具备理解何时以及为什么一个比另一个更好所需要的能力。


1
我有意保持这个问题的开放性,请不要因此而讨厌我。我猜没有人会因此讨厌你,但这会使问题在StackOverflow上变成离题。 - Günter Zöchbauer
2
我还没有尝试过BLoC或Scoped Model。我曾经在一个更大的项目中使用Redux。StreamBuilderInheritedModel更通用。BLoC、ScopedModel和Redux更具体化。你可能可以将Redux与BLoC或ScopedModel结合起来,但正如我所说,我还没有仔细研究这两个。 - Günter Zöchbauer
3
我建议你在 Gitter/Slack/Reddit 上询问。StackOverflow 不适合此类问题。请注意不要改变原意,尽量使语言通俗易懂。 - Rémi Rousselet
2
我觉得如果问题更多地表述为“每个的优势是什么”,而不是何时使用,那么这是一个合理的问题。我认为这是一个能够帮助相对新手的Flutter开发者的问题。 - Ian
1
我建议您查看https://github.com/brianegan/flutter_architecture_samples,因为它展示了一个简单应用在不同架构模式下的实现。然后您可以自行决定哪种最适合您。 - rmtmckenzie
显示剩余7条评论
1个回答

3

Scoped Models vs Bloc

简而言之:如果你的应用程序较小,则使用 scoped models,因为bloc往往会使其复杂化;如果您有大型应用程序,则使用 bloc
请参见此文章以获取详细说明:bloc vs scoped_model


Stream Builder vs Inherited Widget

这是Remi Rousselet提供的有关 stream builderinherited widget 的良好比较:https://dev59.com/Z6rka4cB1Zd3GeqPjc1C#49958864

Streams/Sink绝对是存储状态的绝佳方式。有一些现有的架构,例如BLoC,它们广泛使用了它们。

但是,流并没有完全取代 InheritedWidgetInheritedWidget 具有仅覆盖部分屏幕内容的功能。这种能力的一个很酷的应用是 Theme

一般来说,Streams 用于存储业务逻辑。但是当您需要存储UI逻辑时,InheritedWidgets 更优秀。


请问你能解释一下什么是“业务逻辑”和什么是“UI逻辑”吗? - Muhammad
1
你可以发布一个新帖子或问题来解决这个问题。 - Mangaldeep Pannu
谢谢,这是我的问题:https://dev59.com/zrvoa4cB1Zd3GeqPxh6B - Muhammad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接