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,就先不写了。

你可能感兴趣的:(Flutter,flutter,didUpdateWidget)