我正在尝试将 Firebase 身份验证与 Flutter 结合使用。下面是我的代码。
login_screen.dart
RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5)),
color: blackShadeColor,
child: Text("Login",
style: GoogleFonts.poppins(
textStyle: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: 16))),
onPressed: () {
_loginScreenController
.login(
context: context,
email: _emailController.text,
password: _passwordController.text)
.catchError((error) {
print(error);
});
},
),
login_screen_controller.dart
class LoginScreenController {
/**
* Login Function
*/
Future<void> login({BuildContext context, String email, String password}) async {
FirebaseAuthService firebaseAuthService = FirebaseAuthService();
firebaseAuthService.signInWithEmail(email, password).then(((value){})).catchError((onError){
throw onError;
});
}
}
firebase_auth_service.dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class FirebaseAuthService with ChangeNotifier {
//Sign in with username and password
Future<void> signInWithEmail(String email, String password) async {
FirebaseAuth auth = FirebaseAuth.instance;
try {
UserCredential userCredential = await auth.signInWithEmailAndPassword(
email: email, password: password);
User user = userCredential.user;
if (user != null) {
print("Sign in success: " + user.email);
} else {
print("sign in failed");
throw Exception(
"Sign in Failed. Please check your email and password again");
}
} catch (e) {
print(e.toString());
throw (e);
} finally {
//notifyListeners();
}
}
}
如果出现错误,例如错误的密码、错误的电子邮件或其他内容,Firebase 会抛出错误。问题是我试图捕捉该错误并没有按预期工作。相反,我最终得到了 Unhandled exception
。这是我得到的错误。
I/flutter (18418): [firebase_auth/invalid-email] The email address is badly formatted.
E/flutter (18418): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: [firebase_auth/invalid-email] The email address is badly formatted.
[38;5;248mE/flutter (18418): #0 FirebaseAuthService.signInWithEmail[39;49m
package:wnenterprises/services/firebase_auth_service.dart
E/flutter (18418): <asynchronous suspension>
[38;5;248mE/flutter (18418): #1 LoginScreenController.login[39;49m
package:wnenterprises/controllers/login_screen_controller.dart
[38;5;248mE/flutter (18418): #2 _LoadingScreenState.build.<anonymous closure>[39;49m
package:wnenterprises/screens/login_screen.dart
[38;5;244mE/flutter (18418): #3 _InkResponseState._handleTap[39;49m
package:flutter/…/material/ink_well.dart
[38;5;244mE/flutter (18418): #4 _InkResponseState.build.<anonymous closure>[39;49m
package:flutter/…/material/ink_well.dart
[38;5;244mE/flutter (18418): #5 GestureRecognizer.invokeCallback[39;49m
package:flutter/…/gestures/recognizer.dart
[38;5;244mE/flutter (18418): #6 TapGestureRecognizer.handleTapUp[39;49m
package:flutter/…/gestures/tap.dart
[38;5;244mE/flutter (18418): #7 BaseTapGestureRecognizer._checkUp[39;49m
package:flutter/…/gestures/tap.dart
[38;5;244mE/flutter (18418): #8 BaseTapGestureRecognizer.acceptGesture[39;49m
package:flutter/…/gestures/tap.dart
[38;5;244mE/flutter (18418): #9 GestureArenaManager.sweep[39;49m
package:flutter/…/gestures/arena.dart
[38;5;244mE/flutter (18418): #10 GestureBinding.handleEvent[39;49m
package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (18418): #11 GestureBinding.dispatchEvent[39;49m
package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (18418): #12 RendererBinding.dispatchEvent[39;49m
package:flutter/…/rendering/binding.dart
[38;5;244mE/flutter (18418): #13 GestureBinding._handlePointerEvent[39;49m
package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (18418): #14 GestureBinding._flushPointerEventQueue[39;49m
package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (18418): #15 GestureBinding._handlePointerDataPacket[39;49m
package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (18418): #16 _rootRunUnary (dart:async/zone.dart:1206:13)[39;49m
[38;5;244mE/flutter (18418): #17 _CustomZone.runUnary (dart:async/zone.dart:1100:19)[39;49m
[38;5;244mE/flutter (18418): #18 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)[39;49m
[38;5;244mE/flutter (18418): #19 _invoke1 (dart:ui/hooks.dart:265:10)[39;49m
[38;5;244mE/flutter (18418): #20 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)[39;49m
E/flutter (18418):
这里到底发生了什么?
答案 0 :(得分:-1)
代替异步等待,您可以尝试常规的 .then() 方法并使用捕获错误功能。 :
auth.signInWithEmailAndPassword(email: email, password: password).then((val){print(val);}).catchError((e){print("Exception: " + e.toString())});