firebase 如何显示当前用户帖子?

jvidinwx  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(155)

我尝试显示当前用户的帖子,帖子ID和用户ID相同,当我具体到列表视图代码时出错(

snapshot.data!.docs.map((DocumentSnapshot document))

我得到了这个错误:
没有为类型"DocumentSnapshot〈Map〈String,dynamic〉〉"定义getter "docs"。请尝试导入定义"doc"的库,将名称更正为现有getter的名称,或者定义getter或字段名称"docs"。
我该怎么办?我做错什么了?
我的代码:

class MyRidesScreen extends StatefulWidget {
  const MyRidesScreen({super.key});

  @override
  State<MyRidesScreen> createState() => _MyRidesScreenState();
}

class _MyRidesScreenState extends State<MyRidesScreen> {
  Stream<DocumentSnapshot<Map<String, dynamic>>> myPosts = FirebaseFirestore
      .instance
      .collection('ADS')
      .doc(FirebaseAuth.instance.currentUser!.uid)
      .snapshots();

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: myPosts,
        builder: (BuildContext context, snapshot) {
          if (snapshot.hasError) {
            return const Center(
                child: Text(
              'Error occured',
              style: TextStyle(fontSize: 20),
            ));
          }
          if (!snapshot.hasData) {
            return const Center(child: Text('No requests yet'));
          }
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: Text("Loading"));
          }

          return ListView(
            children: snapshot.data!.docs.map((DocumentSnapshot document) {
              Map<String, dynamic> data =
                  document.data()! as Map<String, dynamic>;
              return Card(
                child: ListTile(),
              );
            }),
          );
        });
  }
}

广告收集
用户集合

3qpi33ja

3qpi33ja1#

问题是你试图在一个文档上调用docs,你只能得到一个集合/查询的文档,而不能在另一个文档上,因为这是不符合逻辑的。

Stream<DocumentSnapshot<Map<String, dynamic>>> myPosts = FirebaseFirestore
  .instance
  .collection('ADS')
  .doc(FirebaseAuth.instance.currentUser!.uid)
  .snapshots();  // this is a stream of single document snapshots, not a whole collection so you can call docs.

您应该仅在CollectionReferenceQuery上调用docs
另一方面,如果您只想显示存在于"ADS"集合中的文档,那么您应该直接在Flutter小部件中使用它,而不是尝试在它上面调用docs
而不是这样:

return ListView(
        children: snapshot.data!.docs.map((DocumentSnapshot document) {
          Map<String, dynamic> data =
              document.data()! as Map<String, dynamic>;
          return Card(
            child: ListTile(),
          );

你应该使用这个:

Map<String, dynamic> documentData =
              snapshot.data.data()! as Map<String, dynamic>;
          return Card(
            child: ListTile(),
          );

相关问题