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

相关推荐
SoaringHeart1 天前
Flutter调试组件:打印任意组件尺寸位置信息 NRenderBox
前端·flutter
九狼1 天前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
_squirrel1 天前
记录一次 Flutter 升级遇到的问题
flutter
Haha_bj1 天前
Flutter——状态管理 Provider 详解
flutter·app
MakeZero2 天前
Flutter那些事-展示型组件篇
flutter
赤心Online2 天前
从零开始掌握 Shorebird:Flutter 热更新实战指南
flutter
wangruofeng2 天前
AI 助力 Flutter 3.27 升级到 3.38 完整指南:两周踩坑与实战复盘
flutter·ios·ai编程
Zsnoin能2 天前
Flutter仿ios液态玻璃效果
flutter
傅里叶3 天前
iOS相机权限获取
flutter·ios
Haha_bj3 天前
Flutter—— 本地存储(shared_preferences)
flutter