gpt4 book ai didi

android - Flutter TabBarView 不断调用构建器

转载 作者:IT王子 更新时间:2023-10-29 06:41:23 33 4
gpt4 key购买 nike

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

我已经尝试过这两种方法,但它们没有用:

Multi tab / page view in flutter

Flutter Switching to Tab Reloads Widgets and runs 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)
],
),
);
},
);

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

enter image description here

最佳答案

如果您想在 TabBarView 中保留屏幕状态,可以在 State 类中使用名为 AutomaticKeepAliveClientMixin 的混合类。

之后,您必须覆盖 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)
],
),
);
},
);

关于android - Flutter TabBarView 不断调用构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51881274/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com