Firebase数据库v4.6.1类型不匹配报错及运行异常求助
解决Firebase Database v4.6.1的回调类型不匹配问题
问题原因
Firebase Database Flutter SDK v4.x+ 版本中,once() 方法的返回值从 Future<DataSnapshot> 调整为 Future<DatabaseEvent>,你的代码仍沿用旧逻辑直接接收 DataSnapshot 参数,导致类型不匹配报错。强制类型转换无法解决本质问题,因为两种类型并不兼容。
修正方案
直接修改回调参数为 DatabaseEvent,通过 event.snapshot 取出数据快照即可:
if (firebaseUser != null) { usersRef .child(firebaseUser.uid) .once() .then((DatabaseEvent event) { DataSnapshot snap = event.snapshot; if (snap.value != null) { Navigator.pushNamedAndRemoveUntil( context, HomeScreen.idScreen, (route) => false); displayToastMessage("You are logged-in now", context); } else { _firebaseAuth.signOut(); displayToastMessage( "No records found. Create a new account", context); } }); }
可读性优化建议
改用 async/await 写法,代码逻辑更清晰,也便于异常捕获:
if (firebaseUser != null) { try { DatabaseEvent event = await usersRef.child(firebaseUser.uid).once(); DataSnapshot snap = event.snapshot; if (snap.value != null) { Navigator.pushNamedAndRemoveUntil(context, HomeScreen.idScreen, (route) => false); displayToastMessage("You are logged-in now", context); } else { await _firebaseAuth.signOut(); displayToastMessage("No records found. Create a new account", context); } } catch (e) { displayToastMessage("Failed to check user status: $e", context); } }
内容的提问来源于stack exchange,提问作者Redeemer Salami O.
相关产品推荐
相关产品推荐

