Flutter 跨组件局部更新Widget
2024-07-08 本文已影响0人
旺仔_100
一、背景
在做项目的时候遇到一个需求,就是需要在一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),
);
}