传递给有状态小部件的值发生变化时进行颤振检测

  • 本文关键字:变化 状态 小部 flutter dart
  • 更新时间 :
  • 英文 :


我有一个有状态的小部件,我传递一个整数到。当传递给小部件的值发生变化时,我想执行一个方法

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作为唯一参数。

来自文档:

当小部件配置改变时调用。

[…]

重写此方法以在小部件更改(例如,到)时响应启动隐式动画)。

最新更新