我创建了一个带有两个标签的Flutter应用程序。在第一个标签上,我有一个ListView
,它显示来自StreamBuilder
的信息。此StreamBuilder
通过http获取数据。
问题是:当我切换到第二个选项卡然后又回到第一个选项卡时,ListView
将重新加载。
在我将StatefulWidget
与AutomaticKeepAliveClientMixin
一起使用之前,但现在我正在使用StatelessWidget
,所以我不能再使用它了。我认为我的构建方法需要纯粹,但我不知道该怎么做。我看到在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());
}
)
);
}
}
答案 0 :(得分:0)
尝试添加postFrame回调
class Test extends StatelessWidget {
_callBack(_){
}
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback(_callBack);
return Container();
}
}