组件ListWidget 继承StatefulWidget后动态传入List数据,组件并不会重新渲染。

问题:

一个ListWidget 继承与 StatefulWidget 当第一次加载时list为[],第二次list有数据时 ListWidget里面的list还是为[],而在调用方是有数据的。

Widget ListWidget extends StatefulWidget {
    @override
    State<ListWidget> createState() => _ListWidgetState(list: []);
}
Widget _ListWidgetState extends State<ListWidget> {
    List<String> list;
    _ListWidgetState(this.list)
    @Override 
    Widget build(BuildContext buildContext) {
        return null;
    }
}

解决办法:

1、将ListWidget继承与StatelessWidget
2、还是继承与StatefulWidget 每次改变ListWidget构造函数中的Key即可(类似于Vue中的Key效果)

官方解释:

如果一个widget发生了变化(例如用户与它交互),它就是有状态的。但是,如果一个子widget对变化做出反应,而其父widget对变化没有反应,那么包含的父widget仍然可以是无状态的widget

原文地址:https://www.cnblogs.com/xyqbk/p/13582943.html