Flutter Firebase:获取Firestore数据时遇到问题

时间:2020-05-17 18:14:08

标签: firebase flutter google-cloud-firestore

我正在尝试检查用户是否已经注册,或者是否需要创建一个新帐户。 我的想法是我想获取用户列表,并检查我的新电子邮件是否匹配。如果不创建新用户 我有一个DatabaseService类,用于获取数据,还有一个AuthService,用于执行登录和注册。 在我的DatabaseService类中,我有一个函数可以返回User对象的列表:

List<User>  getUserList() {
print(databaseReference);
List<User> userList = [];
databaseReference
    .collection("users")
    .getDocuments()
    .then((QuerySnapshot snapshot) {
      print('s');
  snapshot.documents.forEach((doc) {
    print(doc.documentID);
    userList.add(User(
      uid: doc.documentID,
      email: doc.data['email'],
      name: doc.data['name'],
      imgUrl: doc.data['imgUrl'],
    ));
    print(userList);
  });
});
return userList;

}

当我从LoginPage调用它时,此方法工作正常。我得到了所有自动用户的列表。但是,当我在loginIfRegistered类的AuthService函数中用完它时。我只得到一个空清单。这是功能:

  Future loginIfRegistered(String email, String password, List<User> userList) async {
print('CHECKING IF ALREADY REGISTERED');
bool alreadyRegistered = false;

updateUserList();

for (var user in userList) {
  if (user.email == email) {
    alreadyRegistered = true;
  }
}

if (userList.length == 0) {
  alreadyRegistered = false;
}


if (alreadyRegistered) {
// sign in  
print('ALREADY REGISTERED');
  try {
    return await _auth.signInWithEmailAndPassword(
        email: email, password: password);
  } catch (e) {
    print(e.toString());
    return e;
  }
} else {
  print('NOT REGISTERED');
  // register
  return null;
}

}

但是,当我将userList作为参数传递到函数(Future loginIfRegistered(String email, String password, List<User> userList) async {...})中并在LoginPage上对其进行初始化时,没有问题。 我还尝试将列表放在AuthService的顶部,它也可以正常工作,但是我不希望在初始化AuthService时更新列表,而只是在单击“登录”按钮时更新列表。 / p>

我还尝试在updateUserList中向AuthService添加一个loginIfRegistered()函数,但这也不起作用。

那我为什么打getUserList()却得到一个空白列表?

回顾一下:我想拥有一个登录页面,如果您还没有帐户,该页面也会注册您。 当我按下“登录”按钮时,运行SigninIfRegisters(在AuthService中)的功能需要了解我的Firestore数据库中的所有用户(我为所有用户创建了一个集合,而不是从{{1}中提取了一个集合) }之类的(这是个好主意吗?)。因此,我在Firebaseauth中创建了一个函数,该函数给了我一个DatabaseService,如果从List<User>中调用,但在LoginPage中没有任何函数的话,这可以正常工作。如果我没有在AuthService的任何函数中实例化List<User>,它也可以工作。

请有人解释为什么??

0 个答案:

没有答案