gpt4 book ai didi

listview - 在 Flutter 中刷新 ListView

转载 作者:行者123 更新时间:2023-12-03 02:46:45 32 4
gpt4 key购买 nike

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

 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的代码确认对话框中的按钮。

PopUpDialog-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 等于 成功 ,但它一直在打印 fjeodpedp一旦弹出确认对话框。我添加了异步等待,但仍然无法正常工作。

什么是正确的方法?

感谢您的宝贵时间。

最佳答案

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

PopUpDialog().showDeleteDialog();

方法,但执行后操作应该是异步的。

现在您可以编写此语句来解​​决错误。
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;
}

你的成功函数应该是这样的
onSuccess(result){
if (result == 'Success') {
print('success');
setState(() {
data.removeAt(index);
});
} else {
print('fjeodpedp');
}
}

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

关于listview - 在 Flutter 中刷新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930313/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com