Flutter 为什么在statefull小部件中需要didUpdateWidget和build方法?

Flutter 为什么在statefull小部件中需要didUpdateWidget和build方法?,flutter,Flutter,为什么我们需要状态中的didUpdateWidget方法? 无论如何都要调用Build,我们不能在那里添加逻辑吗? 唯一的区别是,我们没有将旧的小部件引用为参数,或者我遗漏了什么吗?是的,当屏幕上重新加载某些内容时,您可以在构建方法中实现逻辑。 每次重新创建相应的小部件时都会调用didUpdateWidget 但是,不同之处在于,当我们可以比较一些值并基于这些值时,我们可以在应用程序上做出决定 示例: class MyApp extends StatefulWidget { int getI

为什么我们需要状态中的didUpdateWidget方法?
无论如何都要调用Build,我们不能在那里添加逻辑吗?

唯一的区别是,我们没有将旧的小部件引用为参数,或者我遗漏了什么吗?

是的,当屏幕上重新加载某些内容时,您可以在构建方法中实现逻辑。 每次重新创建相应的小部件时都会调用
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
      }
  }
 }
类MyApp扩展StatefulWidget{
int getInitialValue(){
返回1;
}
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
int _currentValue=10;
@凌驾
void didUpdateWidget(MyApp oldWidget){
if(oldWidget.getInitialValue()!=\u currentValue){
//表演动画
//从服务器获取数据
}
}
}

以上只是我们如何使用
didUpdateWidget()
的一个例子,我们可以为许多其他场景做类似的事情

好的,现在我明白我可以使用它做什么了。当小部件发生更改时,会调用父小部件的原因,例如didUpdateWidget和build。如果调用state的setState方法,则只调用build。build可以被多次调用,在build方法中订阅流或创建动画是没有意义的。谢谢:)