鸿蒙跨端Flutter学习:InheritedWidget嵌套使用
多个InheritedWidget可以嵌套使用,每个管理自己的数据。最近的Provider。上一层Provider。
·

一、嵌套场景
多个InheritedWidget可以嵌套使用,每个管理自己的数据。
二、嵌套Provider示例
UserInfoProvider(
name: _name,
age: _age,
updateUserInfo: _updateUserInfo,
child: DetailInfoProvider(
address: _address,
phone: _phone,
updateDetailInfo: _updateDetailInfo,
child: ChildWidget(),
),
)
三、查找顺序
四、作用域管理
| Provider | 作用域 | 影响范围 |
|---|---|---|
| 外层Provider | 整个子树 | 所有子组件 |
| 内层Provider | 内层子树 | 内层组件 |
五、UserInfoProvider实现
class UserInfoProvider extends InheritedWidget {
final String name;
final int age;
final String email;
final Function(String, int, String) updateUserInfo;
const UserInfoProvider({
required this.name,
required this.age,
required this.email,
required this.updateUserInfo,
required Widget child,
}) : super(child: child);
static UserInfoProvider of(BuildContext context) {
final UserInfoProvider? result =
context.dependOnInheritedWidgetOfExactType<UserInfoProvider>();
assert(result != null, 'No UserInfoProvider found');
return result!;
}
bool updateShouldNotify(UserInfoProvider oldWidget) {
return name != oldWidget.name ||
age != oldWidget.age ||
email != oldWidget.email;
}
}
六、最佳实践
| 原则 | 说明 |
|---|---|
| 职责分离 | 每个Provider负责一类数据 |
| 控制层级 | 建议2-3层 |
| 查找顺序 | 从最近到最远 |
| 内层优先 | 内层覆盖外层 |
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
更多推荐


所有评论(0)