Flutter:根据登录状态切换PopupMenuButton

时间:2019-01-26 13:43:18

标签: dart flutter

Expanded PopupMenuButton

主屏幕上的图片中的“登录”按钮,可进入登录屏幕。如果用户通过了身份验证,则从登录屏幕上,屏幕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。)

1 个答案:

答案 0 :(得分:0)

在choiceAction()中,您需要在setState方法内部执行切换操作。

然后根据您在开关中的情况切换loggingIn的值。

Filter