Flutter 注销按钮只是在当前页面的顶部添加一个新页面
我在我的应用程序中有一个个人资料页面,单击一个注销按钮,我就会显示登录页面 我的代码是这样的Flutter 注销按钮只是在当前页面的顶部添加一个新页面,flutter,dart,Flutter,Dart,我在我的应用程序中有一个个人资料页面,单击一个注销按钮,我就会显示登录页面 我的代码是这样的 FlatButton( onPressed: () { setState(() { token = null; }); Navigator.of(context).pushRepla
FlatButton(
onPressed: () {
setState(() {
token = null;
});
Navigator.of(context).pushReplacement(CupertinoPageRoute(
builder: (context) => LoginPage()
));
},
child: Text(
Logout,
style: TextStyle(color: Colors.red),
),
),
但它只是在当前页面的顶部添加一个登录页面。因此,如果我从左向右拖动屏幕,它将返回到配置文件页面,如何解决这个问题
看看这个
谢谢您需要完全清除堆栈,而不仅仅是更换堆栈顶部 您可以这样做:
Navigator.of(context)
.pushAndRemoveUntil(
CupertinoPageRoute(
builder: (context) => LoginPage()
),
(_) => false,
);
第二个参数是当返回true时停止弹出的条件
通过使其始终返回false,您将弹出堆栈的其余部分,只保留当前路由。您需要完全清除堆栈,而不仅仅是替换堆栈顶部 您可以这样做:
Navigator.of(context)
.pushAndRemoveUntil(
CupertinoPageRoute(
builder: (context) => LoginPage()
),
(_) => false,
);
第二个参数是当返回true时停止弹出的条件
通过使其始终返回false,您将弹出堆栈的其余部分,只保留当前路由。Hy Harish
要在登录后在页面之间切换,我将使用provider
步骤到步骤:
▶ 在应用程序pubspec.yaml
文件中安装提供商
dependencies:
path_provider: ^3.1.0+1 // install the last version
有关此软件包的详细信息,请参阅。
▶ 创建一个名为up to you的新dart文件,例如logging_provider.dart,编写如下代码:
import 'package:flutter/material.dart';
class LoggingProvider with ChangeNotifier{
final bool isLoggedin = false;
LoggingProvider(this.isLoggedin);
setRegistrationStatus(bool status){
isLoggedin = status;
notifyListeners();
}
}
▶ 将提供程序添加到main.dart文件中的主类:
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider< LoggingProvider >(
builder: (_) => LoggingProvider(true), // here you can give him a status before abb is complied
),
],
child: MaterialApp(
home: Provider.of< LoggingProvider >(context).isLoggedin? // if isLoggedin setted as true show Home else show LoginPage
HomePage() : // as example
LoginPage(),
),
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider(
生成器:()=>LoggingProvider(true),//在abb被遵从之前,您可以在这里给他一个状态
),
],
孩子:MaterialApp(
home:Provider.of(context).isLoggedin?//如果isLoggedin设置为true,则显示home,否则显示LoginPage
HomePage()://作为示例
LoginPage(),
),
);
}
}
▶ 从注销按钮设置登录状态,如下所示:
FlatButton(
onPressed: () => Provider.of<LoggingProvider>(context).setRegistrationStatus(false),
...
FlatButton(
onPressed:()=>Provider.of(context).setRegistrationStatus(false),
...
我希望我能帮助您完成这个小代码示例。Hy Harish 要在登录后在页面之间切换,我将使用
provider
步骤到步骤:
▶ 在应用程序pubspec.yaml
文件中安装提供商
dependencies:
path_provider: ^3.1.0+1 // install the last version
有关此软件包的详细信息,请参阅。
▶ 创建一个名为up to you的新dart文件,例如logging_provider.dart,编写如下代码:
import 'package:flutter/material.dart';
class LoggingProvider with ChangeNotifier{
final bool isLoggedin = false;
LoggingProvider(this.isLoggedin);
setRegistrationStatus(bool status){
isLoggedin = status;
notifyListeners();
}
}
▶ 将提供程序添加到main.dart文件中的主类:
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider< LoggingProvider >(
builder: (_) => LoggingProvider(true), // here you can give him a status before abb is complied
),
],
child: MaterialApp(
home: Provider.of< LoggingProvider >(context).isLoggedin? // if isLoggedin setted as true show Home else show LoginPage
HomePage() : // as example
LoginPage(),
),
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider(
生成器:()=>LoggingProvider(true),//在abb被遵从之前,您可以在这里给他一个状态
),
],
孩子:MaterialApp(
home:Provider.of(context).isLoggedin?//如果isLoggedin设置为true,则显示home,否则显示LoginPage
HomePage()://作为示例
LoginPage(),
),
);
}
}
▶ 从注销按钮设置登录状态,如下所示:
FlatButton(
onPressed: () => Provider.of<LoggingProvider>(context).setRegistrationStatus(false),
...
FlatButton(
onPressed:()=>Provider.of(context).setRegistrationStatus(false),
...
我希望我能帮助你完成这个小的代码示例。嗨,谢谢分享知识。它按预期工作!嗨,它对android非常有效,但对iOS来说仍然是一样的,iOS平台是否需要任何更改?我不知道。你在使用CupertinoApp或MaterialApp吗?嗨,它现在工作了,我忘记在我所在的位置添加代码了检查平台是否是iOS,这就是为什么它不适用于iOS。谢谢!嗨,谢谢分享知识。它按预期工作!嗨,它适用于android,但对于iOS它仍然是一样的,iOS平台需要任何更改吗?我不知道。你在使用CupertinoApp或MaterialApp吗?嗨,它正在工作,我忘了登广告了d我检查平台是否为iOS的代码,这就是为什么它不适用于iOS的原因。谢谢!嗨,哈利勒,谢谢你的分享,我一定会通过的。嗨,哈利勒,谢谢你的分享,我一定会通过的