Flutter 我有一个关于在initstate中有条件地导航到下一页的问题
我想使用共享首选项实现自动登录 我想要实现的是,一旦“LoginPage”启动,它就转到下一页,而不根据存储在共享首选项中的标志值呈现LoginPage 但是,即使实现了这些函数并从initstate调用它们,也存在无法导航的问题。有什么问题Flutter 我有一个关于在initstate中有条件地导航到下一页的问题,flutter,dart,Flutter,Dart,我想使用共享首选项实现自动登录 我想要实现的是,一旦“LoginPage”启动,它就转到下一页,而不根据存储在共享首选项中的标志值呈现LoginPage 但是,即使实现了这些函数并从initstate调用它们,也存在无法导航的问题。有什么问题 //Login Page void autoLogIn() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); final Strin
//Login Page
void autoLogIn() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
final String userId = prefs.getString('username');
print("ddddddddddddddd");
SocketProvider provider = Provider.of<SocketProvider>(context);
Future.delayed(Duration(milliseconds: 100)).then((_) {**//I tried giving Delay but it still didn't work.**
Navigator.of(context).pushNamedAndRemoveUntil("/MainPage", (route) => false);
});
}
@override
void initState() {
// TODO: implement initState
loginBloc = BlocProvider.of<LoginBloc>(context);
if(!kReleaseMode){
_idController.text = "TESTTEST";
_passwordController.text = "1234123";
}
initBadgeList();
autoLogIn();**//This is the function in question.**
super.initState();
print("1111111111111111");
}
//登录页面
void autoLogIn()异步{
final SharedReferences prefs=等待SharedReferences.getInstance();
最终字符串userId=prefs.getString('username');
打印(“DDDDDDDDDDD”);
SocketProvider=provider.of(上下文);
Future.delayed(持续时间(毫秒:100))。然后(({**//)我尝试给出延迟,但它仍然不起作用**
Navigator.of(context).pushnamedremoveintill(“/MainPage”,(route)=>false);
});
}
@凌驾
void initState(){
//TODO:实现initState
loginBloc=BlocProvider.of(上下文);
如果(!kReleaseMode){
_idController.text=“TESTTEST”;
_passwordController.text=“1234123”;
}
initBadgeList();
autoLogIn();**//这就是所讨论的函数**
super.initState();
打印(“1111111111”);
}
如果用户已经登录,我认为您不应该显示登录页面小部件,然后导航到主页
我建议您在执行wait SharedPreferences.getInstance()
时使用并显示启动屏幕或加载程序。在这种情况下,应用程序小部件应如下所示:
class App extends MaterialApp {
App()
: super(
title: 'MyApp',
...
home: FutureBuilder(
future: SharedPreferences.getInstance(),
builder: (context, snapshot) {
if (snapshot.data != null) {
final SharedPreferences prefs = snapshot.data;
final userId = prefs.getString('username');
...
return userId == null ?? LoginPage() : MainPage();
} else {
return SplashScreenOrLoader();
}
}));
}
但如果您仍然想先显示LoginPage,只需在上面的代码中将SplashScreenOrLoader()替换为LoginPage()。如果用户已经登录,我认为您不应该显示LoginPage小部件,然后导航到主页面 我建议您在执行
wait SharedPreferences.getInstance()
时使用并显示启动屏幕或加载程序。在这种情况下,应用程序小部件应如下所示:
class App extends MaterialApp {
App()
: super(
title: 'MyApp',
...
home: FutureBuilder(
future: SharedPreferences.getInstance(),
builder: (context, snapshot) {
if (snapshot.data != null) {
final SharedPreferences prefs = snapshot.data;
final userId = prefs.getString('username');
...
return userId == null ?? LoginPage() : MainPage();
} else {
return SplashScreenOrLoader();
}
}));
}
但如果您仍然想先显示LoginPage,只需在上面的代码中将SplashScreenOrLoader()替换为LoginPage()