使用通用 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 主要用于很少更改的事物:ThemeMediaQueryLocalization