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
相关产品推荐
相关产品推荐

