Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在flatter中刷新ListView_Listview_Flutter_Dart_Async Await - Fatal编程技术网

在flatter中刷新ListView

在flatter中刷新ListView,listview,flutter,dart,async-await,Listview,Flutter,Dart,Async Await,如何刷新列表视图? 假设在A页中,我有一个列表视图,行项目中有一个菜单图标。 当我点击菜单图标时,它将显示一个底部页面对话框,其中有一个删除图标。 单击删除图标时,将弹出删除确认对话框。 单击确认对话框中的“是”按钮后,将删除该项目。一旦收到“成功”状态,它将刷新列表视图。 这是底部工作表删除图标的代码 onTap: () { Navigator.pop(context); var result = PopUpDialog().showDeleteDi

如何刷新
列表视图
? 假设在A页中,我有一个
列表视图
,行项目中有一个菜单图标。 当我点击菜单图标时,它将显示一个底部页面对话框,其中有一个删除图标。 单击删除图标时,将弹出删除确认对话框。 单击确认对话框中的“是”按钮后,将删除该项目。一旦收到“成功”状态,它将刷新
列表视图
。 这是底部工作表删除图标的代码

 onTap: () {
          Navigator.pop(context);
          var result =  PopUpDialog().showDeleteDialog();   // pop up confirmation dialog
          if (result == 'Success') {
                print('success');
                setState(() {
                  data.removeAt(index);
               });
           } else {
               print('fjeodpedp');
           }
         },
这是确认对话框中
Yes
按钮的代码

弹出对话框showDeleteDialog

  onPressed: () async {
      Navigator.pop(buildContext);   // dismiss confirmation dialog
          var result = await _bloc.delete();
          return result;
    },
集团级

Future delete() async {
    Response delete = await _repo.delete();  // delete data in server
    var deleteResponse = Response.fromJson(delete.body);
    return deleteResponse.status;   // return Success
  }
我希望只有当deleteResponse.status等于success时,才会调用setState,但一旦弹出确认对话框,它就会继续打印
fjeodpedp
。我已经添加了async Wait,但仍然不起作用

正确的方法是什么


感谢您的宝贵时间。

我想您不是在等待对话框确认。您应该使用wait方法等待该对话框的结果。我不知道你写了什么

PopUpDialog().showDeleteDialog();
方法,但它应该是异步的,以执行after操作

现在,您可以编写此语句来解决此错误

var result =  await PopUpDialog().showDeleteDialog(); 
或者,如果showDeleteDialog()是异步的->

PopUpDialog().showDeleteDialog().then((result){
if (result == 'Success') {
                print('success');
                setState(() {
                  data.removeAt(index);
               });
           } else {
               print('fjeodpedp');
           }

});
试试这个,让我知道它是否有效

更新

int showDeleteDialog({Function onSuccess, Function onFailure}) {
    _bloc = Provider.of<Bloc>(context);
    showDialog(
        context: context,
        builder: (BuildContext buildContext) {
          return AlertDialog(
              actions: <Widget>[
                FlatButton(
                  color: Colors.orange,
                  child: Text('YES', style: TextStyle(color: Colors.white)),
                  onPressed: () async {
                    Navigator.pop(buildContext);
                    var result = await _bloc.deleteWorkOrder();
                    if(onSuccess!=null) onSuccess(result); <------ Here you can pass your result directly to the function.
                    return result;
                  },
                ),
                FlatButton(
                  color: Colors.white,
                  child: Text('CANCEL'),
                  onPressed: () {
                    if(onFailure!=null) onFailure();
                    Navigator.of(buildContext, rootNavigator: true)
                        .pop('dialog');
                  },
                )
              ],
              title: Text(Localization.of(buildContext).deleteDialogTitle),
              content: Text(Localization.of(buildContext).deleteDialogContent));
        });

    return 0;
  }

@Tony它不会以这种方式工作,因为您在返回中直接返回0,所以每次都会返回0。您可以做一件事,在showDialog方法中将当前函数作为参数传递。并在确认时调用该函数。如果你感到困惑,那么我可以给你一个简短的演示。更新了答案。请看一看,我还是不明白。什么是onSuccess和onFailure?将该索引传递到showDialog方法中,然后将该索引重新传递到success函数中。通过这种方式,您可以管理该问题。
onSuccess(result){
           if (result == 'Success') {
                print('success');
                setState(() {
                  data.removeAt(index);
               });
           } else {
               print('fjeodpedp');
           }
}

onFailure(){
//Add your failiure logic here.
}