首页 > 解决方案 > 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 对后端进行异步调用,使项目暂时消失,直到再次获取项目。

有什么解决方法或解决方法吗?我采取的方法总体上是坏的吗?

标签: fluttermobile

解决方案


您可以将ListView小部件分成不同的Stateful类。然后setState从那里打电话。然后FutureBuilder将不会执行多次。


推荐阅读