Flutter didUpdateWidget 的使用问题 ( 为什么不建议重写)

简单总结

以我的认知:

  1. 不要重写 didUpdateWidget
  2. 你需要重写,是否是你设计有问题
  3. 你确定要重写,且设计没问题。评论下大佬,我也学下这种case。

总结:

  1. 不要依赖于 didUpdateWidget 去发起UI状态变更,因为它的发起是不可控的。
    • 也就是不要重写,如果有必须重写的case 我们可以讨论下
  2. 状态的变更,应该依赖于 明确的指令
    • 主动调用 ViewModel的notification
    • Data驱动UI状态改变:
      • 在ViewModel中设置相应数据(开关、字符串…),
      • 先改变数据,然后notify
      • Widget被标记,下个周期就会build。在build方法中读取 ViewModel中的数值.
  3. 如果你重写了 didUpdateWidget 去改变UI状态,那就应该保证 它在任意时间、频率 去调用,都没问题。

原因:

  • 父Widget调用 setState, 就会引起子Widget的 didUpdateWidget 被调用。
    • 首先父widget,不关心子Widget didUpdateWidget 里干了什么,所以他可以随意更新,导致didUpdateWidget被任意 时间、频率 调用。
  • 即便你知道了 父Widget 什么时候调用,那父Widget的父Widget呢?父父父Widget呢?
  • didUpdateWidget 之后 会调用build方法,所以如果你Widget传参变更了,他就会变更状态。

那什么时候该用呢

  • 嗯说是换监听的时候用,但我没实际遇到 这种case,就先不写了。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值