有没有办法在不注销用户的情况下一键弹出 Flutter 应用程序中的所有屏幕?

Posted

技术标签:

【中文标题】有没有办法在不注销用户的情况下一键弹出 Flutter 应用程序中的所有屏幕?【英文标题】:is there any way to pop all screens in flutter app by one click without logging the user out? 【发布时间】:2021-11-08 07:57:13 【问题描述】:

我希望用户能够通过单击手机后退按钮一次来退出应用程序(然后他会收到一条警告消息)。

但我发现的只是调用exit(0) 的选项,但这是将用户注销。

我正在使用 firebase 和颤振。

此外,当我在主页(登录后出现)时按下后退按钮时,我会再次获得登录视图,而不是退出应用程序。 我该如何防止这种情况(因为我希望用户保持登录状态)

这些是我的 main.dart build() 中的代码:

return StreamProvider<User?>.value(
  value: logic.listenToUserAuth(),
  initialData: null, //user signed out
  child: MaterialApp(
    //initialRoute: '/login',
    //routes: this.routes,
    // passing the change in stream to child widgets
    home: MainWrapper(routes: this.routes,),
  ),

这些是来自 MainWrapper build() 的代码,它决定向用户显示哪个视图,取决于他是否登录,但它不起作用.. 用户总是获得“/登录”视图:

final user = Provider.of<User?>(context);
String initRout = "/login";
// the user logged in
if(user != null) 
  initRout = "/home_page.dart";

return MaterialApp(
  initialRoute: initRout,
  routes: routes,
);

谢谢

【问题讨论】:

【参考方案1】:

对于后退按钮问题,此库将解决您的问题 https://pub.dev/packages/back_button_interceptor

要退出用户,请在点击按钮或执行一些逻辑后使用此方法

FirebaseAuth.instance.signOut();

要使用 Flutter 和 Firebase 保持用户身份验证,请参阅此答案: https://***.com/a/45084649/11838875

【讨论】:

我想要相反的情况,即使应用程序关闭,用户也能保持登录状态。至于图书馆——你能更具体地说明哪种方法适合我的情况吗?我需要弹出应用程序的所有屏幕【参考方案2】:

我遇到了同样的问题,Get 包解决了所有问题,使用Get 包,然后使用 Get.offAll("spacify 应该在堆栈中的最后一个屏幕");你就完成了

【讨论】:

以上是关于有没有办法在不注销用户的情况下一键弹出 Flutter 应用程序中的所有屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不弹出的情况下删除 react-native 中的默认权限?

您可以在不注销用户的情况下更新用户的 cookie 信息吗?

如何不让用户在不注销的情况下返回 login.php?

有没有办法在不实际 ping 用户的情况下提及用户(蓝色突出显示)?

如何在不注销的情况下清除所有会话变量

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?