Flutter 跨组件局部更新Widget

一、背景

在做项目的时候遇到一个需求,就是需要在一widget中点击,然后更新几处widget。

二、方案

a、使用InheritWidget,它有两个问题:

  • InheritedWidget需要成为几处widget的公共祖先,还需要在已有项目中找合适的位置添加InheritedWidget。
  • InheritedWidget没有更新功能,它还需要setState,但是使用了状态管理框架后,可能获取不到setState,例如getx。

b、使用eventbus

能实现解决问题,但是eventbus使用过多,导致代码逻辑混乱,尽量少用

c、使用SharedAppData

作用:向子树共享键值对数据,在更新数据时,通知所有依赖过 key 访问数据的 context 元素更新。

我认为是比较好的方式,它既能跨组建,又能自动更新界面。

三、SharedAppData的使用

在需要的点击的地方setvalue,在需要更新的widget中getValue。

void _onSelectColor(Theme value) {  SharedAppData.setValue<String, Theme?>(context, 'theme', value);}
@override
Widget build(BuildContext context) {
  final Theme theme = SharedAppData.getValue<String, Theme>(context, 'theme', () => Theme);
  return Text(
    "theme = $theme",
    style: TextStyle(color: color,fontWeight: FontWeight.bold),
  );
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容