Flutter获取Firebase通知集合数量返回Null,如何修正?
问题分析与修复方案
你的代码核心问题出在错误使用Firestore的流查询而非单次查询,同时未正确获取文档数量,导致notificationamountData始终返回null。以下是具体修改点:
错误点说明
snapshots()返回的是Stream<QuerySnapshot>,用于实时监听数据变化,不能直接用await获取它的length,这不是异步值的正确获取方式。- 未提前校验
currentuseruid是否为空,若用户未登录会直接导致查询失败。
修改后的代码
@override void initState() { getData(); super.initState(); } String? currentuseruid = FirebaseAuth.instance.currentUser?.uid; int? notificationamountData; getData() async { try { // 先校验用户UID是否存在 if (currentuseruid == null) { showSnackBar(context, "用户未登录"); return; } // 使用get()获取单次查询快照,替代snapshots()流查询 var querySnapshot = await FirebaseFirestore.instance .collection('notifications') .doc(currentuseruid) .collection('user-notifications') .get(); // 从QuerySnapshot的docs属性获取文档总数 notificationamountData = querySnapshot.docs.length; setState(() {}); } catch (e) { showSnackBar( context, e.toString(), ); } } @override Widget build(BuildContext context) { // 为空时显示0,避免页面出现null文本 return Text(notificationamountData?.toString() ?? "0"); }
额外优化(实时监听通知数量)
如果需要在新增通知时自动更新数量,可以改用流监听:
@override void initState() { if (currentuseruid != null) { FirebaseFirestore.instance .collection('notifications') .doc(currentuseruid) .collection('user-notifications') .snapshots() .listen((snapshot) { notificationamountData = snapshot.docs.length; setState(() {}); }); } super.initState(); }
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

