You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中实现Cloud Firestore文档删除前的确认弹窗功能

解决方案:添加删除确认对话框

修改IconButton的onPressed回调,替换直接删除的逻辑,改为弹出确认对话框,仅在用户确认后执行Firestore文档删除操作。以下是完整修改后的代码:

class _TabPage3State extends State<TabPage3> {
  final Stream<QuerySnapshot> driver =
      FirebaseFirestore.instance.collection('driversInfo').snapshots();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Center(
          child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
            Expanded(
                child: StreamBuilder(
                    stream: driver,
                    builder: (BuildContext context,
                        AsyncSnapshot<QuerySnapshot> snapshot) {
                      if (snapshot.hasError) {
                        return Text('出错了!');
                      }
                      if (snapshot.connectionState == ConnectionState.waiting) {
                        return Text('加载中...');
                      }

                      final data = snapshot.requireData;

                      return ListView.builder(
                        itemCount: data.size,
                        itemBuilder: (context, index) {
                          // 提取当前文档的车牌号码,用于后续删除操作
                          final plateNumber = data.docs[index]['plate number'];
                          return Padding(
                            padding: const EdgeInsets.all(10.0),
                            child: Container(
                              padding: EdgeInsets.all(15),
                              decoration: BoxDecoration(
                                color: bgColor,
                                borderRadius: BorderRadius.circular(12),
                              ),
                              child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                children: [
                                  Row(
                                    children: [
                                      Column(
                                        children: [
                                          IconButton(
                                            onPressed: () {
                                              // 弹出确认删除对话框
                                              showDialog(
                                                context: context,
                                                builder: (BuildContext dialogContext) {
                                                  return AlertDialog(
                                                    title: const Text('确认删除'),
                                                    content: const Text('确定要删除这条驾驶员信息吗?'),
                                                    actions: [
                                                      TextButton(
                                                        onPressed: () {
                                                          // 取消删除,关闭对话框
                                                          Navigator.of(dialogContext).pop();
                                                        },
                                                        child: const Text('取消'),
                                                      ),
                                                      TextButton(
                                                        onPressed: () async {
                                                          // 确认删除,执行Firestore删除操作
                                                          await FirebaseFirestore.instance
                                                              .collection("driversInfo")
                                                              .doc(plateNumber)
                                                              .delete();
                                                          // 删除完成后关闭对话框
                                                          Navigator.of(dialogContext).pop();
                                                        },
                                                        child: const Text('确认删除', style: TextStyle(color: Colors.red)),
                                                      ),
                                                    ],
                                                  );
                                                },
                                              );
                                            },
                                            icon: const Icon(
                                              Icons.delete,
                                              color: Colors.red,
                                            ),
                                          ),
                                        ],
                                      ),
                                    ],
                                  ),
                                ],
                              ),
                            ),
                          );
                        },
                      );
                    })),
          ]),
        ),
      ),
    );
  }
}

关键修改说明

  • 提取当前文档的plate number到变量中,避免重复获取数据
  • 将原直接删除的逻辑替换为showDialog,创建带确认/取消按钮的AlertDialog
  • 点击取消按钮仅关闭对话框,不执行任何删除操作
  • 点击确认删除按钮后,才调用Firestore的delete()方法删除对应文档,操作完成后关闭对话框

内容的提问来源于stack exchange,提问作者Bart Stencil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:45:36