所以我有这段代码可以从一个地方获取到另一个地方的路线。 请参阅下面的图片。
我需要为每个旅程添加细节,除非您单击“细节”按钮,否则这些旅程将被隐藏,我想在ExpansionTile / ExpansionPanel中显示数据-本质上是折叠元素。
问题是,当我在按钮上使用{
path: "flowcal-cameyo",
component: AppLoadingComponent,
resolve: {
url: 'externalUrlRedirectResolver'
},
data: {
externalUrl: vFlowcal
}
},
时,它确实会显示数据,但也会再次调用API。
setState() {...}
方法在构建窗口小部件中触发,这就是为什么(我想)这种情况正在发生,但我不知道如何解决。
有更好的方法吗?
由于我是Flutter的新手,所以任何帮助/改进都将受到高度赞赏。
getData()
答案 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