我的 Flutter 项目遇到了一个问题,涉及用于连接到自定义单点登录 (SSO) 服务器的 oauth2_client 包。申请流程结构如下:
启动画面
设置屏幕:用户输入服务器 URL。在这里,我通过 API 调用获取 SSO 服务器配置并将其传递给 oauth2_client 包。 OAuth2 客户端登录:用户启动后,oauth2_client 在 Web 视图中启动登录页面,用户在其中输入凭据。登录成功后,应用程序将返回设置页面并回调。此时,我验证用户令牌并使用以下语句导航到主页:
AppRouter.router.go(AppRouter.home);
此操作正常。 在主页中,用户可以导航到个人资料页面并随后注销。注销后,我调用注销功能并将用户重定向到设置页面:
AppRouter.router.go(AppRouter.settingsPage);
但是,注销后尝试再次登录时就会出现问题。虽然登录过程成功,并且我可以验证用户令牌,但语句:
AppRouter.router.go(AppRouter.home);
无法将应用程序导航到主屏幕。
两个值得注意的观察:
如果用户在注销后关闭应用程序并重新打开它,登录过程将无缝运行,导航到主页。
此问题仅发生在Android发布模式下;调试模式运行没有任何问题。
我在路由器中尝试了各种导航方法(go、push、replace、pushReplacement),但没有成功。此外,我尝试在注销后清除所有屏幕,然后再导航到设置屏幕,但这种方法也未能解决问题。
什么可能导致这种行为?任何见解或建议将不胜感激。
就我而言,我更新了:
MaterialApp.router(
//...
routerDelegate: router.routerDelegate,
routeInformationParser: router.routeInformationParser,
backButtonDispatcher: router.backButtonDispatcher,
)
到
MaterialApp.router(
//...
routerConfig: router,
)