根据Flutter Documentation
:
只要小部件配置发生更改,就会调用
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
之后立即调用,而是在第一次构建之后
另一个问题是,为什么在第一次构建后使用以下代码调用它:
print("didUpdateWidget called"); <--
super.didUpdateWidget(oldWidget); <--
但是如果我在super.didUpdateWidget(oldWidget);
之后打出print,它就可以正常工作。