美文网首页
Flutter 跨组件局部更新Widget

Flutter 跨组件局部更新Widget

作者: 旺仔_100 | 来源:发表于2024-07-08 18:44 被阅读0次

    一、背景

    在做项目的时候遇到一个需求,就是需要在一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),
      );
    }
    

    相关文章

      网友评论

          本文标题:Flutter 跨组件局部更新Widget

          本文链接:https://www.haomeiwen.com/subject/xtlacjtx.html