我对移动开发还很陌生。我一直在与 Cubit 和 HydratedCubit 合作,在我的应用程序中进行一些状态管理。根据我一直在做的一些阅读,HydratedCubit 可用于存储共享设置,以便它们在下一个会话中恢复。我一直在试图弄清楚如何清楚地了解应用程序的入职状态,但我有点困惑。申请流程应如下:
如果用户从未完成入职:
SplachPage() -> 入门() -> 登录()
如果用户已加入。
SplashPage() -> 登录()
SplashPage 应始终显示徽标 2 秒。
我正在尝试弄清楚 HydratedCutib 的 BlocProvider 和 BlocBuilder 应该放在哪里。如果状态显示用户过去已经登录过,我可以将其放在“登录”页面中并立即导航到“登录”。这样做的问题是,它总是会让我的应用程序在加载时进入入门页面,这感觉有点不必要。另一方面,如果用户已经 Onboarded,我可以将提供程序和构建器放在 Splash 页面中,而不导航到 Onboarding,但我不希望用户在状态更改时再次在 SplashPage 中等待 2 秒,并且我'我不确定如果我们是第一次加载 SplashPage 或重建它,我将如何进行区分,因此这可能会导致用户在登录后必须在 SplashPage 中再等待 2 秒。
有什么我不明白的地方,或者 HydratedCubit 不太适合这个用例?
谢谢
首先,在继续我的回答之前必须澄清一件事。您是否希望您的应用程序“记住”用户过去已经完成了入门过程,即使用户卸载/安装了该应用程序?
如果是,水合不是这里的解决方案,因为一旦用户卸载应用程序,水合数据也会被删除。
假设上述不是问题,我要做的是为登录页面制作一个包装器小部件。我们将此称为 OnBoardingWrapper,它将接受 Widget 参数 child。在我们的例子中,子项是 LoginPage。
如果过去已经完成了 onBoarding,则此包装器将在构建器中具有简单的逻辑,然后渲染 LoginPage 小部件,否则渲染 OnBoarding 小部件。
在此 Wrapper 小部件上,可以提供一个水合立方体,它仅具有一个状态值(如 isOnBoardingCompleted)和一个将该值从 false 设置为 true 的方法。
因此,如果呈现了 onBoarding,则在完成时调用该方法,将值设置为 true 并显示登录页面。
如果用户在完成引导流程后重新访问应用程序,则将检索 isOnBoardingCompleted == true 的水合状态,并且用户将跳过引导。