我对在Flutter应用程序(iOS)上使用Firebase身份验证(电子邮件和密码)时大声说出用户有疑问。我进行了很多搜索,但无法完全理解我的问题。
所以在我的应用程序中,我有多个屏幕,这些屏幕是通过Navigator.pushNamed(...)进行路由的。 用户可以导航到应该可以注销的设置屏幕。
class _OptionScreenState extends State<OptionScreen> {
FirebaseAuth _auth = FirebaseAuth.instance;
_signOut() async {
try {
await _auth.signOut();
} catch (e) {
print(e.toString());
}
}
@override
Widget build(BuildContext context) {
(...some more code here....)
ListTile(
title: Text(
'Logout',
style: TextStyle(fontSize: 25.0),
),
onTap: () async {
await _signOut();
Navigator.pushReplacementNamed(context, 'welcome_screen');
},
Welcome_Screen是开始屏幕,用户可以在其中选择登录还是唱歌。
被推送到欢迎屏幕后,出现以下错误:
接收者:null 尝试调用:uid flutter:NoSuchMethodError:在空调用getter'uid'。
所以我的问题是:
答案 0 :(得分:1)
因此,在尝试解决此问题一段时间后,我发现了问题:
我在登录页面的后台有一些功能,该功能加载了用户信息,因此,一旦用户完成登录,一切就准备就绪。
问题是在构建登录页面时,在注销后没有用户从中加载信息时调用了某些函数。
我在用户成功登录后放置了功能,现在一切正常,用户可以注销而没有任何错误。现在,我可以确保在调用这些函数时有一个登录用户。
关于我无法解释的原因是,为什么在welcome_screen上显示错误,因为此屏幕内没有函数,其顺序为: 欢迎屏幕->登录屏幕。 因此,当我将所有内容都关闭到欢迎屏幕时,通常不会加载登录屏幕。但是错误仍然消失了。
感谢@Lunedor向我展示了如何关闭所有以前的屏幕。
答案 1 :(得分:0)
我认为您的问题与欢迎屏幕有关,也许看看它的代码会更好。但是只需快速响应,您就可以在此欢迎屏幕中检查uid是否为null,如果为null,则可以在不登录的情况下引导您的过程。
要关闭所有活动屏幕,您可以使用以下代码代替导航到欢迎屏幕,“ /”表示根页面,因此您可以在此处写页面名称:
SchedulerBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).pushNamedAndRemoveUntil(
'/', (Route<dynamic> route) => false);
});