根据Flutter文档:
didUpdateWidget在小部件配置更改时调用。
但是,在下面的代码中,didUpdateWidget会在第一次立即在initState之后被调用。
didUpdateWidget在小部件配置更改时调用。
但是,在下面的代码中,didUpdateWidget会在第一次立即在initState之后被调用。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Test(),
);
}
}
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
@override
void initState() {
print("initState called");
super.initState();
}
@override
void didUpdateWidget(Test oldWidget) {
print("didUpdateWidget called");
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
return Container();
}
}
// output
//
// initState called
// didUpdateWidget called
有人能描述一下为什么会出现这种情况吗?我应该如何比较整个 oldWidget
和 widget
?
谢谢
更新
正如 @pskink 提到的那样,didUpdateWidget
并不是在 initState
后立即被调用,而是在第一次 build 之后。
还有一个问题是为什么在以下代码中它会在第一次构建后被调用:
print("didUpdateWidget called"); <--
super.didUpdateWidget(oldWidget); <--
但如果我在super.didUpdateWidget(oldWidget);
之后调用print,它就能正常工作。
didUpdateWidget
呢?小部件没有任何更改啊! - ParsdidUpdateWidget
被调用了。 - Parsprint
行与super.didUpdateWidget
交换了位置,现在它按预期工作了。这意味着在super.didUpdateWidget
之前的任何内容都会在第一次构建后立即运行。感谢您的时间和回复。 - Pars