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

Flutter Firebase中DataSnapshot不存在exists属性的解决及替代方案

问题解决方案

报错原因

你调用的once()方法返回值为Event类型,exists getter仅属于DataSnapshot类,直接对Event实例调用exists就会触发该报错。

最优修复方案

仅需要调整判断逻辑的取值路径,先从Event实例中获取snapshot属性再判断即可,修改后的代码片段:

// 原有查询代码不变
var data = await FirebaseDatabase.instance
    .reference()
    .child('Subscribers')
    .orderByChild('number')
    .equalTo(numberPhone)
    .once();

// 仅修改判断行
if (!data.snapshot.exists) {
  // 原有弹窗逻辑保持不变
  await showDialog(
      context: context,
      builder: (_) => AlertDialog(
              title: Text(
                'Sorry!',
                style: TextStyle(color: Colors.red),
              ),
              content: Text(
                "This Number is already Exists ",
                style: TextStyle(color: Colors.indigo[900]),
              ),
              actions: [
                // ignore: deprecated_member_use
                FlatButton(
                    child: Text('Try Again'),
                    onPressed: () {
                      Navigator.of(context).pop();
                    }),
                // ignore: deprecated_member_use
              ]));
  return;
}

替代写法

如果不想用exists getter,也可以通过判断快照值是否为null实现等效校验:

if (data.snapshot.value == null) {

注意:如果对应节点允许存储null值,该写法会出现误判,优先使用exists判断更准确。

内容的提问来源于stack exchange,提问作者ashish rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:03