主屏幕上的图片中的“登录”按钮,可进入登录屏幕。如果用户通过了身份验证,则从登录屏幕上,屏幕pop
返回到主屏幕。
我正在寻找的是一种将按钮更新为与退出按钮交换的方法。我当前的代码只能在该应用被终止并重启后才能执行。
这是下面的简化代码: 以下是有状态窗口小部件的构建方法
bool loggedIn = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Padding(
padding: EdgeInsets.only(top: 8, bottom: 8),
child: Image.asset(
'image/address.png',
),
),
actions: <Widget>[
showLogin(loggedIn, context),
],
),
当前的showLogin
方法仅在终止并重新启动应用程序后才会切换到退出。
showLogin(bool loggedIn, BuildContext context) {
if (!loggedIn) {
return PopupMenuButton<String>(
onSelected: choiceAction,
itemBuilder: (BuildContext context) {
return ["Sign In"].map((String choice) {
return PopupMenuItem<String>(
value: choice,
child: Text(choice),
);
}).toList();
},
);
} else {
return PopupMenuButton<String>(
onSelected: choiceAction,
itemBuilder: (BuildContext context) {
return ["Sign Out"].map((String choice) {
return PopupMenuItem<String>(
value: choice,
child: Text(choice),
);
}).toList();
},
);
}
}
void choiceAction(String choice) {
switch (choice) {
case ("Sign In"):
//Navigate to the nextScreen value
Navigator.push(
context, MaterialPageRoute(builder: (context) => LoginScreen(0)));
break;
case ("Sign Out"):
setSignedOutState(); //Sets state. So Sign Out to Sign in works just fine.
break;
default:
}
}
是否可以使用StreamBuilder实现此目的? (我尝试这样做,但仍然不太了解streamBuilder
。)
答案 0 :(得分:0)
在choiceAction()中,您需要在setState方法内部执行切换操作。
然后根据您在开关中的情况切换loggingIn的值。
Filter