flutter 当传递到statefull小部件的值发生变化时,检测到抖动

ih99xse1  于 2022-11-30  发布在  Flutter
关注(0)|答案(2)|浏览(119)

我有一个statefull小部件,我将一个整数传递给它。我想在传递给小部件的值发生变化时执行一个方法

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

mccptt67

mccptt671#

你可以检查useEffect,它是基于React钩子的useEffect。
或者您可以硬编码它。
创建其他整数:late int lastCalledInteger;
并在构建中检查以下内容:

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

  return Container();
}
pbwdgjma

pbwdgjma2#

你可以简单地在State上覆盖didUpdateWidget,以获得传入参数的每一次更改的通知。如果你有多个参数,你当然需要更改更改的内容。为此,didUpdateWidget提供了oldWidget作为唯一的参数。
从文档中:
每当小部件配置更改时调用。
[...]
覆写这个方法,以便在Widget变更时回应(例如,启动隐含动画)。

相关问题