使用标签时Flutter AppBar(动作)问题

时间:2018-10-02 09:39:21

标签: dart flutter

尝试颤振时遇到问题。 我有一个带有一些动作的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方法位于我创建选项卡的位置,而要刷新的实际数据是选项卡的一部分。我提到这一点是为了与我的问题有一定的联系。

任何见解都会非常有帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

我将具有如下所示的变量,以查看应用程序是否正在等待API响应:

_isWaitingForResponse = false;

Future  getData() {
  if(_isWaitingForResponse) return;
  _isWaitingForResponse = true;
  //change _isWaitingForResponse on api's response
}