You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何检测传入StatefulWidget的参数值发生变化

Flutter StatefulWidget 传入参数变更检测实现方案

你可以通过重写State类的didUpdateWidget生命周期方法实现参数变更监听,这个方法会在父组件传入的参数发生变化、组件需要重建时自动触发,你只需要在方法内对比新旧参数的值,符合条件时调用目标方法即可。

改造后的代码示例

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}");
    // 如果首次初始化也需要同步hh数据,可以在这里也调用一次getDataItems
    getDataItems();
  }

  // 新增重写didUpdateWidget方法
  @override
  void didUpdateWidget(covariant Test oldWidget) {
    super.didUpdateWidget(oldWidget);
    // 对比新旧item参数
    if (oldWidget.item != widget.item) {
      // 参数发生变化时调用更新方法
      getDataItems();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }

  void getDataItems() {
    print("value passed is  ${widget.item}");

    setState(() {
      hh = [widget.item];
    });
  }
}

注意事项

  • didUpdateWidget触发时会携带旧组件的所有参数,你可以根据业务需求对比多个参数的差异,判断是否需要执行更新逻辑
  • initState只会在组件首次创建时执行一次,若首次加载也需要同步内部状态,可在initState中同步调用一次更新方法,避免初始状态数据为空

内容的提问来源于stack exchange,提问作者Geoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:18:03