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