在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.
}