我有一个有状态的小部件,正在向其中传递一个整数。我想在传递给小部件的值发生变化时执行一个方法
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];
});
}
}
所以在上面我想检测传递给小部件的字符串项的值何时发生变化并调用方法
getDataItems
,该方法稍后将更新列表hh。
我如何检测传递的有状态小部件的值何时发生变化?
你可以查看useEffect,它是基于React hook useEffect的。
或者您可以对其进行硬编码。
创建其他整数:
late int lastCalledInteger;
并在构建中检查这一点:
@override
Widget build(BuildContext context) {
if(lastCalledInteger != integer) {
getDataItems();
lastCalledInteger = integer;
}
return Container();
}
didUpdateWidget
上的 State
即可获知传入参数的每次更改。如果您有多个参数,您当然需要检查发生了什么变化。为此 didUpdateWidget
为您提供 oldWidget
作为唯一参数。
来自文档:
每当小部件配置更改时调用。
[...]
重写此方法以在小部件更改时做出响应(例如, 启动隐式动画)。