flutter - setState 重建父小部件,导致 FutureBuilders 中的闪烁效果(因为它们重建?)
问题描述
在我的父小部件中,我有 2 个 FutureBuilders
图像未来生成器
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(
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
将不会执行多次。
推荐阅读
- python - 如何检测图像中的一种颜色?
- linux - 被动地将共享对象注入特定的可执行文件
- android-studio - Intel HAXM 无法在 AMD 上运行,我已关闭 Hyper-V
- r - 根据 R 中的许多条件和组对数据进行子集化并对其进行汇总
- reactjs - 如何在没有无限渲染循环的情况下为调用 setter 函数的子项使用带有数组状态的 useState 钩子?
- google-apps-script - 使用 Google Apps 脚本配置 OAuth
- c++ - C++ 文件处理:显示文件中总字节数和对象数的垃圾值
- c++ - 'this' 指针是否参与了虚函数的多态行为
- sql-server - 如何识别 SSIS CSV to SQL 中的问题数据
- python - 多处理的全局变量