我正在尝试这个 -
final Future<FirebaseUser> user = auth.currentUser();
但问题是,它不是通过“userid”创建文档,而是通过名称创建文档 -
Instance of 'Future<FirebaseUser>'
这实际上是我文档的名称,但我想将其更改为特定的用户ID。
我该怎么做?
我正在尝试这个 -
final Future<FirebaseUser> user = auth.currentUser();
但问题是,它不是通过“userid”创建文档,而是通过名称创建文档 -
Instance of 'Future<FirebaseUser>'
这实际上是我文档的名称,但我想将其更改为特定的用户ID。
我该怎么做?
更新(2020.09.09)
自firebase_auth 0.18.0版本以后
在firebase_auth 0.18.0中进行了几个重大的更新。FirebaseUser现在称为User,currentUser是一个getter,并且currentUser是同步的。
这使得获取uid的代码像这样:
final FirebaseAuth auth = FirebaseAuth.instance;
void inputData() {
final User user = auth.currentUser;
final uid = user.uid;
// here you write the codes to input the data into firestore
}
在 firebase_auth 版本 0.18.0 之前
uid 是 FirebaseUser 对象的一个属性。由于 auth.currentUser() 返回一个 future,您需要等待才能获取用户对象,代码如下:
final FirebaseAuth auth = FirebaseAuth.instance;
Future<void> inputData() async {
final FirebaseUser user = await auth.currentUser();
final uid = user.uid;
// here you write the codes to input the data into firestore
}
invalid_assignment
的错误,为了解决它,我不得不在currentUser
后面加上!
,就像这样:final User user = auth.currentUser!;
- Waqlehfinal FirebaseAuth _auth = FirebaseAuth.instance;
getCurrentUser() async {
final FirebaseUser user = await _auth.currentUser();
final uid = user.uid;
// Similarly we can get email as well
//final uemail = user.email;
print(uid);
//print(uemail);
}
调用函数getCurrentUser以获取结果。例如,我使用了一个按钮:
RaisedButton(
onPressed: getCurrentUser,
child: Text('Details'),
),
FirebaseUser
类已更名为 User
。因此,如果您在尝试使用 FirebaseAuth.instance.currentUser.uid.toString() 检索当前用户的 ID 时遇到错误消息“表达式不评估为函数,因此无法调用”,则需要将代码更新为以下内容:Future<String> inputData() async {
final User user = await FirebaseAuth.instance.currentUser!;
final String uid = user.uid.toString();
return uid;
} - mabt如果您使用 Google 登录,则会获取用户的以下信息。
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = new GoogleSignIn();
void initState(){
super.initState();
firebaseAuth.onAuthStateChanged
.firstWhere((user) => user != null)
.then((user) {
String user_Name = user.displayName;
String image_Url = user.photoUrl;
String email_Id = user.email;
String user_Uuid = user.uid; // etc
}
// Give the navigation animations, etc, some time to finish
new Future.delayed(new Duration(seconds: 2))
.then((_) => signInWithGoogle());
}
Future<FirebaseUser> signInWithGoogle() async {
// Attempt to get the currently authenticated user
GoogleSignInAccount currentUser = _googleSignIn.currentUser;
if (currentUser == null) {
// Attempt to sign in without user interaction
currentUser = await _googleSignIn.signInSilently();
}
if (currentUser == null) {
// Force the user to interactively sign in
currentUser = await _googleSignIn.signIn();
}
final GoogleSignInAuthentication googleAuth =
await currentUser.authentication;
// Authenticate with firebase
final FirebaseUser user = await firebaseAuth.signInWithGoogle(
idToken: googleAuth.idToken,
accessToken: googleAuth.accessToken,
);
assert(user != null);
assert(!user.isAnonymous);
return user;
}
您需要等待异步操作完成。
final FirebaseUser user = await auth.currentUser();
final userid = user.uid;
final FirebaseUser user = auth.currentUser().then((FirebaseUser user) {
final userid = user.uid;
// rest of the code| do stuff
});
var user = await FirebaseAuth.instance.currentUser!
不正确吗? - SunshineFirebaseUser
类已更改为 User
。 - mabt要获取用户的uid、电子邮件和其他信息,请检查用户是否已登录,然后从User
类中检索这些值。
User? user = FirebaseAuth.instance.currentUser;
// Check if the user is signed in
if (user != null) {
String uid = user.uid; // <-- User ID
String? email = user.email; // <-- Their email
}
这里有一个替代方案:
Future<String> inputData() async {
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uid = user.uid.toString();
return uid;
}
it returns the uid
as a String
FirebaseUser
已更改为 User
。 - mabt你也可以尝试这个。
currentUser() {
final User user = _firebaseAuth.currentUser;
final uid = user.uid.toString();
return uid;
}
currentUser()
,它将返回当前登录用户的uid。 uid=FirebaseAuthService().currentUser();
在你的Flutter小部件之前,你可以将这个添加到全局状态中。
final FirebaseAuth auth = FirebaseAuth.instance;
final User user = auth.currentUser;
final myUid = user.uid;
这将使得myUid
在此情况下可用。
通常情况下,它总是会返回。
Instance of 'Future<FirebaseUser>'
Future<String> getCurrentUID() async{
final FirebaseUser user = await _auth.currentUser();
final String uid = user.uid;
return uid;
}
然后在需要该ID的位置调用此函数,如下所示
Widget build(BuildContext context) {
void getid(String foo) {
userID = foo;
}
AuthService().getCurrentUID().then((value) => getid(value));
return Scaffold(
...
);
}
这是获取ID最方便的方法。您也可以像这样获取电子邮件和手机号码。
这是一个非常全面的资源,用最新的Firebase代码解决Flutter中与注册和登录相关的所有问题。https://kickertech.com/login-and-register-easily-with-flutter-using-firebase/