为什么在Stateful Widget中我们需要didUpdateWidget和build方法?

3

为什么在一个state中我们需要didUpdateWidget方法?
无论如何都会调用build方法,我们不能在那里添加逻辑吗?
唯一的区别是我们没有对旧widget的引用作为参数,或者我有遗漏吗?

1个回答

3

是的,当屏幕上的某些内容重新加载时,您可以在构建方法中实现逻辑。每当相应的小部件被重新创建时,都会调用didUpdateWidget

但是,不同之处在于,当我们可以比较某些值并根据这些值在应用程序上做出决策时。

例如:

class MyApp extends StatefulWidget {
  int getInitialValue() {
    return 1;
  }
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int _currentValue = 10;
  @override
  void didUpdateWidget(MyApp oldWidget) {
      if(oldWidget.getInitialValue() != _currentValue) {
        // Perform animation
        // Fetch data from server
      }
  }
 }

上面只是一个如何使用didUpdateWidget()的示例,我们可以在许多其他情况下执行类似的操作。

2
好的,现在我明白我可以用它来做什么了。当小部件发生变化时,例如由于父小部件,didUpdateWidget和build方法会被调用。如果我调用状态的setState方法,只有build方法会被调用。build方法可能会被多次调用,在其中订阅流或创建动画是没有意义的。谢谢 :) - Znar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接