因为您想减少StatefulWidget实例,您可以将获取数据的任务委托给父有状态小部件。您可以传递一个回调来通过StatelessWidget的构造函数执行获取数据的任务,只要我们想刷新数据就会调用该构造函数。
class _ParentWidgetState extends State<ParentWidget>{
...
Future<dynamic> _fetchData(){..}
...
Widget build(BuildContext){
return Container(
...
ChildWidget(onRefresh:_fetchData)
...
);
}
}
class ChildWidget extends StatelessWidget{
ChildWidget({Key? key,this.onRefresh}):super(key:key);
final Future<dynamic> Function() onRefresh;
...
@override
Widget build(BuildContext context){
return RefreshIndicator(
onRefresh:onRefresh,
child:..
);
...
}
}
关键是将加载数据的任务委托给父StatefulWidget的状态,以便您可以使用其他机制(如ChangeNotifier)使父小部件的状态调用 API 并在调用setState未来后以其自己的状态呈现。