如何在flutter上使用firebase正确实现注销
Posted
技术标签:
【中文标题】如何在flutter上使用firebase正确实现注销【英文标题】:How to properly implement Logout with firebase on flutter 【发布时间】:2018-08-04 12:07:04 【问题描述】:这听起来很愚蠢,但我不能真正正确地注销我的应用程序,那是因为我在 MaterialApp 上使用了多个 FirebaseAnimatedList 和路由
routes: <String,WidgetBuilder>
'/StartAppPage':(BuildContext context)=>new StartAppPage(),
'/LoginPage':(BuildContext context)=> new LoginPage(),
'/HomePage':(BuildContext context)=> new HomePage)
,
因此,应用程序会根据是否有用户来检查使用情况并路由到主页或登录。
我的主页有一个 FirebaseAnimatedList 和 在我的主页上有一个注销按钮可以执行此操作
await googleSignIn.signOut();
await FirebaseAuth.instance.signOut();
await FirebaseDatabase.instance.goOffline();
return Navigator.pushReplacementNamed(context, '/StartApp');
到主页并注销用户。
但是当另一个用户再次登录时,列表会显示旧用户的数据,并且该列表可以用来弄乱我的数据库
我怎样才能正确实现这一点,setPersistance 关闭或打开都没有区别
解决方案:通过应用保留一个 Firebase 用户实例。我推荐一个全局变量
【问题讨论】:
显示您用来注销用户的方法 这也可能是与您从数据库中传输数据的方式有关的问题 我不明白你,究竟如何? 我的意思是要么您没有正确注销用户,要么您没有以正确的方式查看数据(基于当前用户) 这更有意义,我可以使用正确的用户登录和注销,我正在使用的查询需要我当前的用户详细信息才能执行。它目前正在等待用户在那里显示列表和每个页面都设置了用户。 【参考方案1】:退出后,您可以考虑在当前屏幕上检查用户是否已通过身份验证。如果用户仍处于登录状态,则显示数据。如果没有,则导航到登录屏幕。
FirebaseAuth.instance
.idTokenChanges()
.listen((User? user)
if (user == null)
debugPrint('User is currently signed out!');
// TODO: navigate to Login screen?
else
debugPrint('User is signed in!');
// TODO: display data
);
【讨论】:
以上是关于如何在flutter上使用firebase正确实现注销的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Firebase 正确配置 Flutter 应用程序?
在 Flutter 中使用 Firebase 然后(Instagram)进行正确的登录架构
如何使用firebase在flutter中添加推荐程序[关闭]