在Flutter中使用Firebase时,遇到“在null上调用了getter 'uid'”的错误通常是因为尝试从一个空对象(null)上调用uid
属性。这种情况可能发生在以下几种场景:
uid
时,用户尚未登录,导致FirebaseAuth.instance.currentUser
返回null。在访问用户信息之前,确保用户已经登录。
import 'package:firebase_auth/firebase_auth.dart';
final FirebaseAuth _auth = FirebaseAuth.instance;
Future<void> checkUserLoggedIn() async {
User? user = _auth.currentUser;
if (user != null) {
print('User UID: ${user.uid}');
} else {
print('No user is currently logged in.');
}
}
如果你在处理异步操作(如登录过程),确保在操作完成后再访问用户信息。
Future<void> signInWithEmailAndPassword(String email, String password) async {
try {
UserCredential userCredential = await _auth.signInWithEmailAndPassword(
email: email,
password: password,
);
User? user = userCredential.user;
if (user != null) {
print('User UID: ${user.uid}');
}
} catch (e) {
print('Error signing in: $e');
}
}
如果你需要在UI中实时显示用户状态,可以使用StreamBuilder
来监听FirebaseAuth
的状态变化。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class UserStatus extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
User? user = snapshot.data;
return Text('Logged in as: ${user?.uid}');
} else {
return Text('Not logged in');
}
},
);
}
}
uid
作为数据的根节点,确保数据隔离。通过以上方法,可以有效避免在null上调用uid
的问题,并确保应用程序在处理用户身份验证时更加健壮和可靠。
领取专属 10元无门槛券
手把手带您无忧上云