Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException
Posted
技术标签:
【中文标题】Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException【英文标题】:Flutter unable to catch PlatformException while attempting firebase auth 【发布时间】:2018-10-29 14:56:37 【问题描述】:我最近才开始使用颤振,我正在尝试使用电子邮件和密码实现 Firebase 登录,当我输入正确的电子邮件和密码时它可以工作,但当密码错误时它不起作用。当密码错误时,它会给出一个 PlatformException,然后应用程序会冻结,即使我已经尝试捕获异常,而 android studio 显示如下:
这是我的登录实现:
String _reason;
Future<void> _performLogin() async
String reason;
// This is just a demo, so no actual login here.
try
FirebaseUser user = await FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _password);
if(user != null)
Navigator.of(context).push(new MaterialPageRoute<dynamic>(
builder: (BuildContext context)
return new MyApp();
,
));
final snack = new SnackBar(
content: new Text("Signed In Successfully"),
action: null,
duration: new Duration(seconds: 4),
backgroundColor: Colors.black,
);
Scaffold.of(context).showSnackBar(snack);
on PlatformException catch(e)
reason = '$e.message';
/*final snack = new SnackBar(
content: new Text(e.message),
action: null,
duration: new Duration(seconds: 4),
backgroundColor: Colors.black,
);
Scaffold.of(context).showSnackBar(snack);*/
setState(()
_reason = reason;
);
我还加了import 'package:flutter/services.dart' show PlatformException;
请告诉我如何捕捉异常,谢谢。
【问题讨论】:
尝试在以后登录时添加.catchError(
@Tree 很遗憾没有工作。
我在另一项任务中遇到了同样的问题。我通过在我的代码中手动查找错误来解决它。尝试匿名登录,看看是否有效。在firebase中启用匿名唱歌。如果这也不起作用,则可能是您在应用程序中的 firebase 设置。比再次通过 firebase 上的 codelab 并再次配置您的应用程序。
【参考方案1】:
使用 FirebaseException 而不是 PlatformException
on FirebaseException catch (e)
【讨论】:
【参考方案2】:我最近也遇到了这个错误,我发现.catchError()
回调没有在调试模式下被调用(当你点击 VSCode 中的Run->Start Debugging
按钮时)。
但是,当您输入 flutter run -d 时,.catchError()
方法将被回调,因为它未处于调试模式。
要获得您喜欢的模拟器的代码,请将这行代码粘贴到终端中:
instruments -s devices
如果这不起作用,您也可以尝试粘贴:
xcrun simctl list
.catchError()
方法将与以前不同地被调用,其中的代码将按预期执行!
此外,应用程序不会再因PlatformException()
而崩溃,而是您会得到这样的日志:
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The getter 'uid' was called on null.
Receiver: null
我在 Google 登录中也遇到过这个问题,其中 .catchError()
没有被调用!
总之,如果你在处理 Firebase Authentication 的错误时遇到了一些错误,你应该首先尝试通过终端运行。谢谢,我希望这会有所帮助!
【讨论】:
【参考方案3】:我有一段时间遇到同样的问题,并找出了原因。
这里的问题是,尽管“似乎”你无法捕捉到 PlatformException ,实际上,您“正在捕捉”异常。
在Android Studio中,我们可以设置调试中断策略, 通过运行 > 查看断点。
如果您取消选中 Enabled,您会发现 Android Studio“不会妨碍”您捕获异常,并且当 catch 子句执行时,您的应用将正确显示小吃栏,这正是我们所期望的“当我们不是在调试”应用程序。
但是,当我们启用 Break on exceptions 进行调试时,Android Studio 只是通过在 catch 子句执行之前中断 PlatformException 来完成其工作。
因此,您可以取消选中已启用选项,或者只需按下 Android Studio 中的“恢复程序”按钮,而不必担心。你的应用程序可能工作得很好。 :)
【讨论】:
仍然是dart调试中的一个bug。 GitHub 中是否已经提出了问题?否则我认为应该报告。【参考方案4】:在 Firebase 控制台设置中更新您的 android 调试 sha1certificate 指纹并尝试
【讨论】:
我似乎找不到任何显示如何执行此操作的资源,如何在 windows 中获取指纹? ***.com/questions/27609442/…关注贾米尔的回答 我只是仔细检查了我的 SHA1 和我的 firebase 控制台上的那个,它们是一样的。以上是关于Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:Firebase 身份验证和 Firestore 快照流
Flutter bloc 和 Firebase 电话身份验证
Flutter Web 中的 Firebase Phone 身份验证