我正在尝试检查用户是否已经注册,或者是否需要创建一个新帐户。
我的想法是我想获取用户列表,并检查我的新电子邮件是否匹配。如果不创建新用户
我有一个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>
,它也可以工作。
请有人解释为什么??