Android studio 颤振重新登录它不会指向预期的主页
Flatter注销会指向登录页面,但重新登录后不会重定向到预期的主页 我已使用以下导航进行登录Android studio 颤振重新登录它不会指向预期的主页,android-studio,flutter,logout,bottomnavigationview,Android Studio,Flutter,Logout,Bottomnavigationview,Flatter注销会指向登录页面,但重新登录后不会重定向到预期的主页 我已使用以下导航进行登录 Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_, __, ___) => Home())); 我的应用程序由三个底部导航栏组成。主页位于第二个导航栏中。我必须从第三个导航栏注销 我已使用以下代码注销 Navigator.pushNamedAndRemoveUntil(context, '/Login'
Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));
我的应用程序由三个底部导航栏组成。主页位于第二个导航栏中。我必须从第三个导航栏注销
我已使用以下代码注销
Navigator.pushNamedAndRemoveUntil(context, '/Login', (_) => false);
我也试过代码
Navigator.popAndPushNamed(context, "/Login");
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) => Login(),), (Route route) => false);
请帮助我找到解决方案。尝试使用共享首选项存储为登录密钥,并检查是否为真,然后转到主屏幕或重定向到登录屏幕 首先,在您的
pubspec.yaml
dependencies:
flutter:
sdk: flutter
shared_preferences: ^0.5.6+2
飞溅屏幕。飞镖
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
这是我们检查isLogin是否为真的第一个屏幕,然后转到主屏幕或其他重定向到登录屏幕
_autoLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('isLogin')) {
prefs.setBool('isLogin', false);
}
if (prefs.getBool('isLogin')) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
} else {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));;
}
}
LoginScreen.dart
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
主屏幕.省道
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
单击注销时,将isLogin设置为false
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
我希望这能帮助你 尝试使用共享首选项存储为登录密钥,并检查是否为真,然后转到主屏幕或重定向到登录屏幕 首先,在您的
pubspec.yaml
dependencies:
flutter:
sdk: flutter
shared_preferences: ^0.5.6+2
飞溅屏幕。飞镖
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
这是我们检查isLogin是否为真的第一个屏幕,然后转到主屏幕或其他重定向到登录屏幕
_autoLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('isLogin')) {
prefs.setBool('isLogin', false);
}
if (prefs.getBool('isLogin')) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
} else {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));;
}
}
LoginScreen.dart
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
主屏幕.省道
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
单击注销时,将isLogin设置为false
_setIsLogin() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', true);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
));
}
MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
onPressed: () {
_setIsLogin();
},
child: Text("LOGIN",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18.0)),
),
_logout() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('isLogin', false);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
}
我希望这能帮助你 这是我的启动屏幕
class SplashState extends State<SplashScreen>{
bool isLogged = false;
startTime(){
return new Timer(Duration(milliseconds: 3000), navigateUser);
}
@override
void initState() {
super.initState();
getStoredValue();
}
void getStoredValue() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('isLoggin')) {
prefs.setBool('isLoggin', false);
print("login set to False");
}
isLogged = prefs.getBool('isLoggin');
print("Status in splash -----------$isLogged");
startTime();
}
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return Container(
height: double.infinity,
width: double.infinity,
decoration: BoxDecoration(
gradient:LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
colorStyle.splashPink,
colorStyle.splashOrange,
],
)
),
child: Center(
child: Image.asset("assets/images/splash_logo.png", height: 85.0),
),
);
}
void navigateUser() {
if (isLogged == true) {
Navigator.of(context).pushReplacement(
PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));
}
else {
Navigator.of(context).pushReplacement(
PageRouteBuilder(pageBuilder: (_, __, ___) => Login()));
}
}
}
这是我的闪屏
class SplashState extends State<SplashScreen>{
bool isLogged = false;
startTime(){
return new Timer(Duration(milliseconds: 3000), navigateUser);
}
@override
void initState() {
super.initState();
getStoredValue();
}
void getStoredValue() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey('isLoggin')) {
prefs.setBool('isLoggin', false);
print("login set to False");
}
isLogged = prefs.getBool('isLoggin');
print("Status in splash -----------$isLogged");
startTime();
}
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return Container(
height: double.infinity,
width: double.infinity,
decoration: BoxDecoration(
gradient:LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
colorStyle.splashPink,
colorStyle.splashOrange,
],
)
),
child: Center(
child: Image.asset("assets/images/splash_logo.png", height: 85.0),
),
);
}
void navigateUser() {
if (isLogged == true) {
Navigator.of(context).pushReplacement(
PageRouteBuilder(pageBuilder: (_, __, ___) => Home()));
}
else {
Navigator.of(context).pushReplacement(
PageRouteBuilder(pageBuilder: (_, __, ___) => Login()));
}
}
}
您是否尝试共享首选项?是否尝试了
Navigator.of(context.pushreplacementname('/Login')代码>@AhmedKhattab yep。。但还是要面对这个问题。@HardikTalaviya你是说我使用了共享偏好吗?如果是。。是的,我用过it@SanaAfreen是保存您的登录密钥并根据首选项中设置的密钥打开屏幕,是否尝试此操作?是否尝试共享首选项?是否尝试Navigator.of(context).pushReplacementNamed('/login')代码>@AhmedKhattab yep。。但还是要面对这个问题。@HardikTalaviya你是说我使用了共享偏好吗?如果是。。是的,我用过it@SanaAfreen是的,保存您的登录密钥并按照首选项中设置的密钥打开屏幕,是否尝试此操作?