往期回顾
从零开始的Flutter之旅: StatelessWidget
从零开始的Flutter之旅: StatefulWidget
在之前的文章中,介绍了StatelessWidget与StatefulWidget的特性与它们的呈现原理。
这期要聊的是它们的另一个兄弟InheritedWidget。
特性
InheritedWidget是Flutter中的一个非常重要的功能组件,它能够提供数据在widget树中从上到下进行传递。保证数据在不同子widget中进行共享。这对于一些需要使用共享数据的场景非常有效,例如,在Flutter SDK中就是通过InheritedWidget来共享应用的主题与语言信息。
可能你还有点模糊,别急,下面我们通过一个简单的示例来了解InheritedWidget。
示例
相信开始学Flutter时都看过官方的计数器示例。我们将官方提供的计数器示例使用InheritedWidget进行改造。
首先我们需要一个CountInheritedWidget,它继承于InheritedWidget。
class CountInheritedWidget extends InheritedWidget {
CountInheritedWidget({@required this.count, Widget child})
: super(child: child);
// 共享数据,计数的数量
final int count;
// 统一的获取CountInheritedWidget实例, 方便树中子widget的获取共享数据
// 必须在State中调用才会有效
static CountInheritedWidget of(BuildContext context) {
// 调用共享数据的子widget将不会回调didChangeDependencies方法,即子widget将不会更新
// return context.getElementForInheritedWid