我通过提供者实现了身份验证
问题是何时第一次通知 myHomeCalss 用户已通过不返回正确页面(MainGui)进行身份验证
SplashPages 是一个带有继续按钮的页面,并推送登录页面,
登录页面被推送到客户之外
但是当我没有通过 SplashPages 时,它就完美了
请随意
//启动页面
ContinueButton(
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(
builder: (_) =>
ListenableProvider.value(
value: yourModel,
child: LoginPage(),
),
),
);
}
)
//主
void main() async {
setupLocator();
WidgetsFlutterBinding.ensureInitialized();
await firebase_core.Firebase.initializeApp();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AuthenticationService()),
],
child: MyApp(),
),
);
}
//我的应用
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHome(),
builder: (context, child) => Navigator(
key: locator<DialogService>().dialogNavigationKey,
onGenerateRoute: (settings) => MaterialPageRoute(
builder: (context) => DialogManager(child: child)),
));
}
}
我的家
Class MyHome extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: FutureBuilder<bool>(
future: startTime(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot2) {
if (snapshot2.hasData) {
if (snapshot2.data) {
return SplashPages();
} else {
return Consumer<AuthenticationService>(builder: (_, auth, __) {
if (auth.currentUserr == null) {
return LoginPage();
} else {
return FutureBuilder(
future: auth.populateCurrentUser(auth.currentUserr),
builder: (context, snapshot) {
if (snapshot.hasData) {
if (auth.currentUserr.emailVerified) {
return MainGui();
} else {
return ValidationMailPage(
email: auth.currentUserr.email,
);
}
} else
return Container(
// child: Center(
// child: SpinKitRotatingCircle(
// color: Colors.white,
// size: 50.0,
// ))
);
});
}
});
}
}
答案 0 :(得分:1)
您可以考虑使用 SharedPreferences,您将在其中存储用户(或者可能只是令牌),然后在呈现应用程序之前检查 main 是否存储有令牌/用户;如果有令牌,您登录然后推送到主页,如果没有,则直接导航到登录页面。
SharedPrefenreces 是持久化数据存储,即使您重新启动应用程序,它也会持续存在,但 Provider 是一种状态管理解决方案,不会在应用程序重新启动之间持续存在。
这是您可以使用的 SharedPreferences 插件。