尝试颤振时遇到问题。 我有一个带有一些动作的AppBar。 这些动作之一是日历小部件。我期望的行为是通过新的日期选择来更改我的脚手架上的数据。 问题是,尽管我设法完成了此行为,但对我的API的调用执行了两次。我确定问题出在我放置的 RefreshIndicator (以便用户按需刷新页面),但是我不明白为什么... 由于某些原因,当我更改日期并因此更改了数据时,它将其标识为刷新状态,然后执行 _handleRefresh()。问题是,我仍然希望具有下拉至刷新的行为。
上的文件(tabView.dart文件) 脚手架的小部件树
RefreshIndicator(
key: _modelRefreshKey,
child: ListView.builder(
itemCount: this._fetchedData?.length,
itemBuilder: (BuildContext context, int index) {
if (this._fetchedData!= null) {
final MyModel myModel = this._fetchedData[index];
return (index == 0)
? ResultsLayout(
model: myModel ,
lastUpdateTxt: myModel.someTXT,
)
: MyModelInheritedWidget(
model: myModel,
child: ModelCardLayout(),
);
} else {
return EmptyWidget();
}
},
),
onRefresh: _handleRefresh,
),
处理刷新功能
Future<Null> _handleRefresh() async {
Completer<Null> completer = new Completer<Null>();
this.getData().then((_) {
completer.complete();
});
return completer.future;
}
在选择新日期时,该函数执行,该刷新再次调用数据(hometab.dart文件)
if (picked != null && picked != _selectedDate) {
_selectedDate = picked;
modelRefreshKey.currentState.widget.selectedDate = picked;
modelRefreshKey.currentState?.getData();
}
值得指出的是,date方法位于我创建选项卡的位置,而要刷新的实际数据是选项卡的一部分。我提到这一点是为了与我的问题有一定的联系。
任何见解都会非常有帮助。
谢谢。
答案 0 :(得分:0)
我将具有如下所示的变量,以查看应用程序是否正在等待API响应:
_isWaitingForResponse = false;
Future getData() {
if(_isWaitingForResponse) return;
_isWaitingForResponse = true;
//change _isWaitingForResponse on api's response
}