Flutter 检测传递给有状态小部件的值何时发生变化

问题描述 投票:0回答:2

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

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。 我如何检测传递的有状态小部件的值何时发生变化?

flutter dart
2个回答
5
投票

你可以查看useEffect,它是基于React hook useEffect的。

或者您可以对其进行硬编码。

创建其他整数:

late int lastCalledInteger;

并在构建中检查这一点:

@override
Widget build(BuildContext context) {
  if(lastCalledInteger != integer) {
    getDataItems();
    lastCalledInteger = integer;
  }

  return Container();
}

4
投票

您只需覆盖

didUpdateWidget
上的
State
即可获知传入参数的每次更改。如果您有多个参数,您当然需要检查发生了什么变化。为此
didUpdateWidget
为您提供
oldWidget
作为唯一参数。

来自文档:

每当小部件配置更改时调用。

[...]

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

© www.soinside.com 2019 - 2024. All rights reserved.