错误的代码如下:
TextButton(
onPressed: () async {
final email = _eMail.text;
final password = _passWord.text;
try {
final userCredential =
FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
print(" UC = \n");
print(userCredential);
} catch (e) {
print("Error Code: ");
print(e.runtimeType);
print(e);
}
},
child: Text("Login"),
),
错误原因:FirebaseAuth.instance.signInWithEmailAndPassword 是一个异步方法,但上述代码并没有使用 await 来等待它完成,而是直接将其赋值给 userCredential。
修正后的代码:
TextButton(
onPressed: () async {
final email = _eMail.text;
final password = _passWord.text;
try {
// 使用 await 等待异步方法完成
final userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
print("Login successful. UserCredential:");
print(userCredential);
} catch (e) {
// 捕获异常
print("Error occurred:");
print(e.runtimeType); // 输出异常的类型
print(e); // 输出完整的异常信息
}
},
child: Text("Login"),
),
FirebaseAuth.instance.signInWithEmailAndPassword 是一个异步方法,返回值是一个 Future 对象。必须用 await 关键字等待其执行完成,或者通过 .then() 和 .catchError() 方法处理其结果。