鸿蒙跨端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

相关推荐
2501_941864962 小时前
科学记忆法提升学习效率
学习
好奇龙猫2 小时前
【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(4):单词语法】
学习
别了,李亚普诺夫2 小时前
运算放大器的参数、选型与应用-学习笔记
笔记·学习
知识分享小能手2 小时前
Oracle 19c入门学习教程,从入门到精通,PL/SQL 编程详解:语法、使用方法与综合案例(6)
sql·学习·oracle
richxu202510012 小时前
嵌入式学习之路->stm32篇-->(8)I2C通讯(上)
stm32·嵌入式硬件·学习
行业探路者2 小时前
如何利用二维码提升富媒体展示的效果?
大数据·人工智能·学习·产品运营·软件工程
小白阿龙2 小时前
鸿蒙+flutter 跨平台开发——决策工具的开发实现
flutter·华为·harmonyos·鸿蒙
生擒小朵拉2 小时前
ROS1学习笔记(一)
笔记·学习
丝斯20112 小时前
AI学习笔记整理(52)——大模型之Agent 智能体
人工智能·笔记·学习