我正在开发一个使用 Firestore 进行数据库操作的 Flutter 应用程序。在应用程序的一部分中,我有一个用户列表,我想使用 AlertDialog 实现删除功能。但是,当我点击 PopupMenuButton 中的“删除”选项时,没有任何反应,并且用户没有被删除。
代码说明:
我有一个
Users
小部件,可以从 Firestore 获取用户数据并将其显示在 ListView
中。每个用户项目都表示为 ListTile
,其中 PopupMenuButton
包含“编辑”和“删除”选项。
trailing: PopupMenuButton(
itemBuilder: (context) {
return [
PopupMenuItem(
value: 'edit',
child: const Text('Edit', style: TextStyle(fontSize: 13.0)),
onTap: () {
// Edit functionality works correctly
},
),
PopupMenuItem(
value: 'delete',
child: const Text('Delete', style: TextStyle(fontSize: 13.0)),
onTap: () {
// Delete functionality is not working as expected
},
),
];
},
),
对于“删除”选项,我使用名为
AlertDialog
的 DeleteUserDialog
,它应该在确认后删除用户。
ElevatedButton(
onPressed: _deleteUser, // Calls _deleteUser function
style: ElevatedButton.styleFrom(
backgroundColor: Colors.brown,
),
child: const Text('Delete'),
),
...
Future<void> _deleteUser() async {
try {
await FirebaseFirestore.instance.collection('users').doc(widget.userId).delete();
// Show success message and close the dialog
} catch (error) {
// Show error message
}
}
问题:
问题是,当我点击 PopupMenuButton 中的“删除”选项时,用户没有被删除,也没有显示错误消息。似乎调用了 _deleteUser 函数,但没有发生文档删除。
预期结果:
点击“删除”后,我希望删除用户对话框从 Firestore 中删除用户文档并显示成功消息。如果有错误,应该显示错误消息。
问题:
在这种情况下,什么可能导致用户删除失败?
如何在 Flutter 中使用 AlertDialog 和 Firestore 正确实现删除功能?
根据您的上下文,它会像
_showDeleteDialog([String msg = '']) async {
await showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(msg),
),
);
}
__deleteUser() async {
await Future.delayed(Duration(seconds: 1));
String message = '';
try {
//...your code here
//you can add your own logic here
message = 'User deleted successfully';
// Show success message and close the dialog
} catch (error) {
// Show error message and close the dialog
message = 'Error deleting user ${error.toString()}}';
}
_showDeleteDialog(message);
}
并调用类似
onTap: __deleteUser,
的方法。