Flutter:如何在不进行API调用的情况下重新渲染视图?

时间:2019-10-07 15:01:47

标签: api flutter dart

所以我有这段代码可以从一个地方获取到另一个地方的路线。 请参阅下面的图片。

我需要为每个旅程添加细节,除非您单击“细节”按钮,否则这些旅程将被隐藏,我想在ExpansionTile / ExpansionPanel中显示数据-本质上是折叠元素。

问题是,当我在按钮上使用{ path: "flowcal-cameyo", component: AppLoadingComponent, resolve: { url: 'externalUrlRedirectResolver' }, data: { externalUrl: vFlowcal } }, 时,它确实会显示数据,但也会再次调用API。

setState() {...}方法在构建窗口小部件中触发,这就是为什么(我想)这种情况正在发生,但我不知道如何解决。

有更好的方法吗?

由于我是Flutter的新手,所以任何帮助/改进都将受到高度赞赏。

getData()

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

这是我解决问题的方法,但首先,我将尝试解释原因。

问题

问题是我有一个getData()方法正在我的build方法中调用API,因此,每次您进行更改时,它都会调用build方法,然后分别执行getData方法。

...
future: getData()
...

修复

必须在getData()中执行initState()方法,以防止其多次执行。首先,我定义了一个变量dataFetched,该变量仅在getData()方法完成时设置。设置好之后,将来的构建器将继续执行并运行其中的代码。

...
var dataFetched;

@override
  void initState(){
    super.initState();
    dataFetched = getData();
  }

...
FutureBuilder(
  future: dataFetched,
     builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
        if(snapshot.connectionState == ConnectionState.done){...}
     }
  }
)               
...

我不确定这是最好的方法,但至少可以解决我的问题。

请阅读此主题以获取更多详细说明。

How to deal with unwanted widget build?

信用:RémiRousselet