繁体   English   中英

Flutter TabBarView 不断调用构建器

[英]Flutter TabBarView keeps calling builders

我的 tabBar 有一个 StatelessWidget 小部件,其中包含 2 个 statefulWidget。 问题是,当单击管理器查看我的所有选项卡(默认登录我的第一个选项卡)时,会不断调用 tab1 小部件构建器。

我已经尝试过这两种方法,但它们不起作用:

颤振中的多标签/页面视图

Flutter 切换到 Tab 重新加载小部件并运行 FutureBuilder

这真的很烦人,因为在某些小部件中,我需要发出一些 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)
        ],
      ),
    );
  },
);

}

这是我的调试器的打印捕获:

在此处输入图片说明

如果您想在 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)
          ],
        ),
      );
    },
  );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM