我有一个有状态的小部件,我传递一个整数到。当传递给小部件的值发生变化时,我想执行一个方法
class Test extends StatefulWidget {
final String item;
const Test({
Key? key,
required this.item,
}) : super(key: key);
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
List<String> hh = [];
@override
void initState() {
super.initState();
print("init state value is ${widget.item}");
}
@override
Widget build(BuildContext context) {
return Container();
}
void getDataItems() {
print("value passed is ${widget.item}");
setState(() {
hh = [widget.item];
});
}
}
因此,在上面,我想检测传递给小部件的字符串item的值何时发生变化,并调用方法getDataItems
,该方法稍后将更新列表hh。我如何检测传递的值是否发生了变化?
你可以检查useEffect,它是基于React钩子useEffect。
或者你可以硬编码。
创建其他整数:late int lastCalledInteger;
在build中检查:
@override
Widget build(BuildContext context) {
if(lastCalledInteger != integer) {
getDataItems();
lastCalledInteger = integer;
}
return Container();
}
您可以简单地在State
上重写didUpdateWidget
以通知传递的参数的每次更改。如果你有多个参数,你当然需要改变改变了什么。因此,didUpdateWidget
为您提供oldWidget
作为唯一参数。
来自文档:
当小部件配置改变时调用。
[…]
重写此方法以在小部件更改(例如,到)时响应启动隐式动画)。