返回
代码分析**
Android
2024-01-12 03:33:25
InheritedWidget 源码分析和应用
#
源代码路径:packages/flutter/lib/src/widgets/inherited_notifier.dart
abstract class InheritedNotifier<T> extends InheritedWidget {
const InheritedNotifier({
Key key,
@required Widget child,
@required this.notifier,
}) : super(key: key, child: child);
final ChangeNotifier notifier;
@override
bool updateShouldNotify(InheritedNotifier<T> old) => notifier != old.notifier;
}
InheritedWidget 的关键属性 :
-
notifier :要管理的状态,可以是任何实现 ChangeNotifier 接口的对象。
-
child :InheritedWidget 的子元素,将在其状态更改时接收更新通知。
-
key :InheritedWidget 的唯一标识符,在子元素更新时用作比较。
updateShouldNotify 方法 :
-
比较当前 InheritedWidget 的
notifier
与旧的 InheritedWidget 的notifier
是否相同,如果不同则返回 true,否则返回 false。 -
如果
updateShouldNotify
方法返回 true,则子元素将收到更新通知,并有机会重建。
#
-
创建 InheritedWidget 子类 :
- 扩展
InheritedNotifier
类并实现notifier
字段。 notifier
字段应该是一个ChangeNotifier
类的实例,它包含要管理的状态。
- 扩展
-
将 InheritedWidget 添加到 widget 树中 :
- 在要共享状态的子元素的上方添加
InheritedNotifier
widget。
- 在要共享状态的子元素的上方添加
-
从 InheritedWidget 中获取状态 :
- 使用
InheritedModel.inheritedFrom
方法从子元素中获取 InheritedWidget 的状态。 InheritedModel.inheritedFrom
方法返回一个InheritedNotifier
类的实例,可以通过notifier
字段访问状态。
- 使用
-
监听状态更改 :
- 添加
ChangeNotifier
类的addListener
方法,并在状态更改时更新 UI。
- 添加
-
移除监听状态更改 :
- 添加
ChangeNotifier
类的removeListener
方法,并在不再需要状态更新时移除监听。
- 添加
#
-
共享状态 :InheritedWidget 可以用于在 widget 树中共享状态,例如应用程序主题、语言或用户首选项。
-
管理状态更新 :InheritedWidget 可以用于管理状态更新,例如表单字段的值或列表中的项目。
-
构建自定义组件 :InheritedWidget 可以用于构建自定义组件,例如主题或语言切换器。
#
#