无法使用AlertDialog删除用户文档

问题描述 投票:0回答:1

我正在开发一个使用 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 正确实现删除功能?

flutter dart google-cloud-firestore
1个回答
0
投票

根据您的上下文,它会像

_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,
的方法。

© www.soinside.com 2019 - 2024. All rights reserved.