使用通用BLoC提供程序和继承的小部件有什么区别?它们是相同的,相同的还是完全不同的?
我知道,无论您在小部件树中的级别如何,两者都可以访问数据但是如果您能解释其中的区别,我将非常高兴
它们具有类似的目的(将状态传递给小部件树下方的小部件),但是在获取值和应用更改方面存在差异。
在BLoC中,您可以通过使用BlocBuilder<MyBloc, MyBlocState>
检索当前状态,并在add
中使用BlocProvider.of<MyBloc>(context)
事件以更改该值。
使用InheritedWidgets,您可以通过context.inheritFromWidgetOfExactType(MyInheritedWidget)
获取当前状态。但是InheritedWidget
是不可变的(字段标记为final
)。您只能通过重建整个窗口小部件来更改状态。这就是为什么InheritedWidget
主要用于事物,而很少更改的原因:Theme
,MediaQuery
,Localization
等