flutter - UnHandled Exception : 无法捕获错误
问题描述
我正在尝试将 Firebase Auth 与 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):
这里到底发生了什么?
解决方案
您可以尝试常规的 .then() 方法并使用 catch 错误函数,而不是 async await。:
auth.signInWithEmailAndPassword(email: email, password: password).then((val){print(val);}).catchError((e){print("Exception: " + e.toString())});
推荐阅读
- java - 使用 google or-tools SAT 求解器舍入 LinearExpr
- c# - EF Core SQLite 如何使用外键播种数据
- flutter - 需要帮助了解 flutter_bloc 如何注入 bloc
- python - Blender插件中的自定义节点套接字和CustomSocketInterface
- c# - .Net Core 3.1 将 Serilog 与 Microsoft.Extensions.Logger 一起使用
- python - 不能使用 python VLC,因为 VLC 的路径是不可更改的
- angularjs - 创建 Firebase 登录系统时出现注入器 unpr 错误?
- java - 如何将多个信息从客户端应用程序发送到服务器?
- powershell - 表达式或语句中出现意外标记(尝试将新域设置为别名)
- java - 从图库中选择图像路径为空