【发布时间】:2021-08-12 15:10:00
【问题描述】:
我在从 firestore 获取数据时遇到问题。我可以看到 firestore 集合中存在所有文档。但它在流生成器中返回空列表。这是我的代码:
// Chat Screen.Dart
class ChatScreen extends StatefulWidget {
static final routeName = "/chat";
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Inbox"),),
body: FutureBuilder<String>(
future: DatabaseService.instance.getUserId(),
builder: (context, idSnap) {
if (idSnap.connectionState == ConnectionState.done) {
print("id snap :${idSnap.data}");
return StreamBuilder<QuerySnapshot>(
stream: DatabaseService.instance.chatListStream(idSnap.data),
builder: (context, chatsSnap) {
if (chatsSnap.connectionState == ConnectionState.waiting) {
return Text("waiting for the data");
} else if (chatsSnap.hasError) {
return Text('error ${chatsSnap.error}');
} else {
print("has data");
print("document found: ${chatsSnap.data.docs.length}"); // it prints 0
return Text("data is loaded");
}
});
} else {
return Container();
}
}
),
);
}
// DatabaseService.dart
class DatabaseService{
DatabaseService._privateConstructor();
static final DatabaseService instance = DatabaseService._privateConstructor();
FirebaseFirestore firestore = FirebaseFirestore.instance;
Future<String>getUserId() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String userId = prefs.getString('user_id') ?? '0';
return userId;
}
Stream<QuerySnapshot>chatListStream(String userId){
return firestore.collection('users').doc(userId).collection('chatList').snapshots();
}
}
我已经检查了正确的集合和文档标题,并且传递的 userId 不是 null 和有效数据。这是 firestore 数据库的屏幕截图:
我在这里做错了什么?
【问题讨论】:
-
print("id snap :${idSnap.data}");你有一个有效的 id 吗?
-
是的,它提供了有效的 id
标签: firebase flutter google-cloud-firestore stream-builder