加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dart – Force Flutter重绘所有小部件

发布时间:2020-12-14 14:58:10 所属栏目:百科 来源:网络整理
导读:有没有办法强制Flutter重绘所有小部件(例如在区域设置更改后)? (Stackoverflow不允许我提交,除非问题中有足够的文字). 解决方法 这种类型的用例,你有孩子可以读取的数据,但你不想显式地将数据传递给你所有孩子的构造函数参数,通常会调用一个InheritedWidget
有没有办法强制Flutter重绘所有小部件(例如在区域设置更改后)?

(Stackoverflow不允许我提交,除非问题中有足够的文字).

解决方法

这种类型的用例,你有孩子可以读取的数据,但你不想显式地将数据传递给你所有孩子的构造函数参数,通常会调用一个InheritedWidget. Flutter将自动跟踪哪些小部件依赖于数据并重建已更改的树的部分.有一个 LocaleQuery小部件,旨在处理区域设置更改,您可以看到它在 Stocks example app中的使用方式.

简而言之,这就是Stocks正在做的事情:

>在根小部件(在本例中为StocksApp)上进行回调以处理区域设置更改.此回调执行一些操作,然后返回LocaleQueryData的自定义实例
>将此回调注册为MaterialApp构造函数的onLocaleChanged参数
>需要区域设置信息的子窗口小部件使用LocaleQuery.of(context).
>当语言环境发生更改时,Flutter仅重绘具有依赖于语言环境数据的小部件.

如果要跟踪区域设置更改以外的其他内容,可以创建自己的扩展InheritedWidget的类,并将其包含在应用程序根目录附近的层次结构中.它的父级应该是StatefulWidget,其键设置为子级可访问的GlobalKey. StatefulWidget的状态应该拥有您要分发的数据,并公开用于更改调用setState的方法.如果子窗口小部件想要更改状态数据,则可以使用全局键获取指向State(key.currentState)的指针并在其上调用方法.如果他们想要读取数据,他们可以调用InheritedWidget子类的静态(context)方法,这将告诉Flutter这些小部件需要在State调用setState时重建.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读