firebase 无法< AppUserData>从函数“users”返回类型为“Stream〈List>”的值,因为它的返回类型为“Future〈List< AppUserData>>”

nom7f22z  于 2022-12-27  发布在  其他
关注(0)|答案(2)|浏览(98)

我正在flutter中用firebase构建一个聊天应用程序,所以我创建了一个文件,将firebase数据库连接到我的应用程序:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:socket/services/user.dart';

class DatabaseService {
  final String? uid;

  DatabaseService({this.uid});
  final CollectionReference userCollection =
      FirebaseFirestore.instance.collection("users");

  Future<void> saveUser(String name) async {
    return await userCollection.doc(uid).set({'name': name});
  }

  AppUserData _userFromSnapshot(DocumentSnapshot snapshot) {
    return AppUserData(name: snapshot['name'], uid: uid);
  }

  Stream<AppUserData> get user {
    return userCollection.doc(uid).snapshots().map(_userFromSnapshot);
  }

  List<AppUserData> _userListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.docs.map((doc) {
      return _userFromSnapshot(doc);
    }) as List<AppUserData>;
  }

  Future<List<AppUserData>> get users {
    return userCollection.snapshots().map(_userListFromSnapshot);
  }
}

下面是用户dart:

class AppUser {
  final String? uid;
  AppUser({this.uid});
}

class AppUserData {
  final String? uid;
  final String name;

  AppUserData({this.uid, required this.name});
}

但是,我得到了错误
无法从函数“users”返回类型为“Stream〈List〉”的值,因为它的返回类型为“Future〈List〉”。
在functionFuture〈List〉获取用户。我没有真正在数据库和供应商的经验,所以我真的不明白这个错误意味着什么。你能帮助我吗?谢谢你提前。

**编辑:**我将Future<List<AppUserData>>更改为Stream<List<AppUserData>>,但出现错误

Can you Help?监听的_MapStream〈QuerySnapshot〈Map〈String,dynamic〉〉,List〉抛出了异常。

dnph8jn4

dnph8jn41#

这只是一个类型规范问题,snapshots()是一个Stream,所以尝试返回它时,方法返回应该与它匹配,将Future<List<AppUserData>>更改为Stream<List<AppUserData>>

Stream<List<AppUserData>> get users {
   return userCollection.snapshots().map(_userListFromSnapshot);
  }
oxf4rvwz

oxf4rvwz2#

如果你想提取集合用户的信息,你可能不需要使用snapshot(),你可以使用get()。

userColletion.get()
            .then((snapshot) {
          for (DocumentSnapshot doc in snapshot.docs) {
            //do something
          }
        });

当你使用snapshot()时,你创建了一个Stream,就像你在错误日志中看到的那样。使用get你只会得到一次集合的文档。如果你需要继续观察,你可能会发现流构建器的合理使用,或者数据流中的一个项目列表。我不确定你给这个类的使用。
这里你有一个相关的问题:What is the difference between getDocuments() and snapshots() in Firestore?

相关问题