Flutter获取Firestore查询快照长度返回Instance of Future<int>怎么办?
问题原因
- Firestore的
snapshots()方法返回的是Stream类型的异步数据流,调用length属性获取流的总事件数时,返回的是Future<int>类型的异步结果,而非同步的int值 - 你直接对
Future<int>调用toString(),得到的是对象本身的描述文本Instance of Future<int>,而非Future执行完成后返回的数字值,这就是你在Text组件里看到异常内容的根本原因
正确实现方案
你可以用StreamBuilder来监听这个异步流的结果,示例代码如下:
@override Widget build(BuildContext context) { return StreamBuilder<QuerySnapshot>( stream: FirebaseFirestore.instance .collection("children") .where("parentUID", isEqualTo: uid) .snapshots(), builder: (context, snapshot) { // 处理加载状态 if (snapshot.connectionState == ConnectionState.waiting) { return const Text('加载中...'); } // 处理错误状态 if (snapshot.hasError) { return const Text('加载失败'); } // 拿到查询结果统计长度 final count = snapshot.data?.docs.length ?? 0; return Text('Children $count'); }, ); }
如果你只需要一次性获取当前的列表长度而不需要实时监听更新,可以把
snapshots()换成get(),配合FutureBuilder使用即可。
内容的提问来源于stack exchange,提问作者user14431894
相关产品推荐
相关产品推荐

