鸿蒙跨端Flutter学习:InheritedWidget嵌套使用

一、嵌套场景

多个InheritedWidget可以嵌套使用,每个管理自己的数据。
App
ThemeProvider
AuthProvider
UserInfoProvider
ChildWidget

二、嵌套Provider示例

dart 复制代码
UserInfoProvider(
  name: _name,
  age: _age,
  updateUserInfo: _updateUserInfo,
  child: DetailInfoProvider(
    address: _address,
    phone: _phone,
    updateDetailInfo: _updateDetailInfo,
    child: ChildWidget(),
  ),
)

三、查找顺序

查找
类型匹配?
不匹配
查找
匹配
子Widget
最近的Provider
返回数据
继续向上
上一层Provider
返回数据

四、作用域管理

Provider 作用域 影响范围
外层Provider 整个子树 所有子组件
内层Provider 内层子树 内层组件

五、UserInfoProvider实现

dart 复制代码
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!;
  }

  @override
  bool updateShouldNotify(UserInfoProvider oldWidget) {
    return name != oldWidget.name ||
        age != oldWidget.age ||
        email != oldWidget.email;
  }
}

六、最佳实践

按功能拆分
避免过度嵌套
控制层级数量
明确职责边界
合理管理依赖

原则 说明
职责分离 每个Provider负责一类数据
控制层级 建议2-3层
查找顺序 从最近到最远
内层优先 内层覆盖外层

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
sheji341617 分钟前
【开题答辩全过程】以 基于微信小程序的少儿编程学习平台为例,包含答辩的问题和答案
学习·微信小程序·小程序
wincheshe1 小时前
AI Agent 辅助工具学习 --- SDD 开发与实践
人工智能·学习
C羊驼1 小时前
C/C++数据结构与算法:穷举法
c语言·c++·笔记·学习·算法
Willliam_william2 小时前
QEMU学习之路(11)— 使用VSCode调试qemu-system-riscv64
ide·vscode·学习
却道天凉_好个秋2 小时前
音视频学习(九十七):自适应码率(ABR)
学习·音视频·abr
red_redemption2 小时前
自由学习记录(142)
学习
لا معنى له2 小时前
JEPA:联合嵌入预测架构介绍 ——学习笔记
笔记·学习
阳光永恒7362 小时前
Python零基础入门全套资料包免费分享 | 从0到1系统学习路线(含课件+源码+实战案例)
开发语言·python·学习·编程入门·python教程·编程学习·免费资料
weixin_458872612 小时前
东华复试OJ二刷复盘15
学习
却道天凉_好个秋2 小时前
音视频学习(九十六):PLC
学习·音视频·plc