在导航到其他屏幕时,检查身份验证状态的使用者会中断



我的应用程序的用户需要进行身份验证。身份验证状态由提供程序类跟踪。登录功能运行良好,但是,用户也可以注销,这会带来问题。

在main.dart中,我使用一个消费者小部件来跟踪身份验证状态:

child: Consumer<AuthenticationProvider>(
builder: (ctx, auth, child) => MaterialApp(
title: 'FlutterChat',
home: auth.isAuth
? WelcomeScreen()
: FutureBuilder(
future: auth.tryAutoLogin(),
builder: (ctx, authResultSnapshot) =>
authResultSnapshot.connectionState ==
ConnectionState.waiting
? SplashScreen()
: AuthFlowScreen(),
),
),
),

在应用程序启动时,消费者将检查身份验证状态,如果用户未通过身份验证,则用户将被重定向到AuthFlowScreen,否则用户将看到WelcomeScreen。如果用户遵循AuthFlowScreen并成功进行身份验证,则用户将自动转到WelcomeScreen,因为消费者就是这样做的。

WelcomeScreen有一个导航栏,用户可以从中导航到应用程序的其他部分。导航栏还有一个注销按钮。按下此按钮时,main.dart文件中的使用者需要做出反应。只要用户没有导航到任何其他屏幕,注销就可以工作,AuthFlowScreen就会显示给用户。但是,如果用户导航到应用程序中的其他部分,则不会发生这种情况。

导航发生在:

Navigator.push(context, MaterialPageRoute(builder: (context) {
return ChatOverviewScreen();
}))

注销脚本:

void logout() {
_auth.signOut();
_userEmail = null;
_userId = null;
notifyListeners();
}

导航似乎扰乱了main.dart文件中的消费者,然而,我如何在应用程序中导航,以便main.dart中的消费者仍在工作。

为了让登录系统更好地使用集团状态管理,您可以在这里找到完整的示例:https://bloclibrary.dev/#/flutterlogintutorial

相关内容

  • 没有找到相关文章

最新更新