在我的父部件中我有 2 个 FutureBuilders
图片 FutureBuilder
FutureBuilder(
future: scannedUserBloc.getImageUrl(widget.userId),
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.done) {
return Container(
height: MediaQuery.of(context).size.height / 5,
width: MediaQuery.of(context).size.width / 5,
child: Image.network(snapshot.data)
);
} else {
return Text("Image is loading");
}
}
列出 FutureBuilder
FutureBuilder(
future: scannedUserBloc.getMembershipPrograms(widget.userId),
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.done) {
var programs = snapshot.data as List<MembershipPrograms>;
if(programs.length > 0) {
hasPrograms = true;
return programsRowWidget(context, programs);
} else {
return noProgramsColumnWidget(context);
}
}else {
//loading indicator
return Container(
);
}
});
当我想点击 ListView 中的一个项目时,我希望它改变它的边框,所以它看起来像是被选中了。为此,我需要调用 setState,但当我调用它时,它会导致 FutureBuilders 闪烁。发生这种情况是因为(我假设)小部件重建,这导致 FutureBuilders 对后端进行异步调用,使项目暂时消失,直到再次获取项目。
是否有任何解决方法或修复方法?一般而言,我采用的方法是否有问题?
最佳答案
您可以将 ListView
小部件分离到不同的 Stateful
类。然后从那里调用 setState
。那么FutureBuilder
就不会执行多次了。
关于flutter - setState 重建父部件,导致 FutureBuilders 中出现闪烁效果(因为它们重建了?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64448984/