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
相关产品推荐
相关产品推荐

