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

相关推荐
SoaringHeart5 小时前
Flutter 查缺补漏:@JsonKey 属性全解,让模型层不再被后端字段牵着走
flutter
前进的李工5 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律7 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
CCIE-Yasuo8 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga9 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野9 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光10 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
WEI_YANG_JU11 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩11 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦12 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习