我创建了一个带有两个选项卡的 flutter 应用程序。在第一个选项卡上,我有一个 ListView
,它显示来自 StreamBuilder
的信息。此 StreamBuilder
通过 http 获取数据。
问题是:当我切换到第二个选项卡然后返回到第一个选项卡时,ListView
重新加载。
在我使用 StatefulWidget
和 AutomaticKeepAliveClientMixin
之前,但现在我使用的是 StatelessWidget
,所以我不能再使用它了。我认为我的构建方法需要 pure 但我不知道该怎么做。我看到在 StatefulWidget
中有 initState()
方法,但这是同样的问题,我无法使用它。
class ListImmeubleTab extends StatelessWidget{
@override
Widget build(BuildContext context) {
bloc.fetchAllImmeubles();
return Scaffold(
body: StreamBuilder(
stream: bloc.allImmeubles,
builder: (context, AsyncSnapshot<List<ImmeubleModel>> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
String color;
switch(index % 3){
case 0:
color = "green";
break;
case 1:
color = "blue";
break;
case 2:
color = "red";
break;
}
return ListTile(
leading: CircleAvatar(
child: Image.asset("assets/houses/house_$color.png"),
),
title: Text(snapshot.data[index].numero.toString() + " " + snapshot.data[index].rue),
subtitle: Text(snapshot.data[index].zip.toString() + " " + snapshot.data[index].ville),
);
}
);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
return Center(child: CircularProgressIndicator());
}
)
);
}
}
最佳答案
尝试添加一个 postFrame 回调
class Test extends StatelessWidget {
_callBack(_){
}
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback(_callBack);
return Container();
}
}
关于flutter - 切换选项卡时防止 StreamBuilder 重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872021/