我的tabBar有一个StatelessWidget小部件,其中包含2个statefulWidgets。问题是,当单击管理器以查看我的所有选项卡时(默认情况下在第一个选项卡上着陆),tab1小部件生成器不断被调用。
我已经尝试了这两种方法,但是它们没有用。 Stackoverflow1
这真的很烦人,因为在某些小部件中,我需要发出一些http请求,并且它们也一直被调用。
body: TabBarView(
children: <Widget>[
Tab1Page(),
Tab2Page(),
这是我的tab1页面,它是一个stateFulWidget
Widget build(BuildContext context) {
// TODO: implement build
print("tab1: Builder");
return ScopedModelDescendant<MainModel>(
builder: (BuildContext context, Widget child, MainModel model) {
List<SolicitudDto> listadoSolicitudesAprobadas =
model.obtenerSolicitudesPendientes();
return Scaffold(
body: ListView(
children: <Widget>[
_buildCards(context, listadoSolicitudesAprobadas)
],
),
);
},
);
}
这是我的调试器的打印记录
非常感谢。
答案 0 :(得分:2)
如果要在TabBarView中保留屏幕状态,可以在State类中使用名为AutomaticKeepAliveClientMixin
的mixin类。
此后,您必须覆盖wantKeepAlive
方法并返回true
。
我在这里写了一篇关于这个的帖子:https://medium.com/@diegoveloper/flutter-persistent-tab-bars-a26220d322bc
更新
您可以尝试通过这种方式来避免每次切换标签时都请求数据。
//global variable at your state class
List<SolicitudDto> listadoSolicitudesAprobadas;
Widget build(BuildContext context) {
// TODO: implement build
print("tab1: Builder");
return ScopedModelDescendant<MainModel>(
builder: (BuildContext context, Widget child, MainModel model) {
if (listadoSolicitudesAprobadas == null){
listadoSolicitudesAprobadas = model.obtenerSolicitudesPendientes();
}
return Scaffold(
body: ListView(
children: <Widget>[
_buildCards(context, listadoSolicitudesAprobadas)
],
),
);
},
);