Flutter:将选择功能与PopupMenuButton一起使用以导航到另一页

时间:2020-03-14 02:39:08

标签: flutter dart

我正在尝试从位于应用程序主页上的PopupMenuButton列表上的“注销”按钮导航回登录页面。我尝试配置的“退出”按钮如下所示:

enter image description here

简化的代码如下:

@override
Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      title: Text('Home Page'),
      actions: <Widget>[
        PopupMenuButton<String>(
          onSelected: choiceAction,
          itemBuilder: (BuildContext context) {
            return MenuOptions.choices.map((String choice){
              return PopupMenuItem<String>(
                value: choice,
                child: Text(choice),
              );
            }).toList();

onSelected调用以下choiceAction

  void choiceAction(String choice) {
    setState() {
      if (choice == MenuOptions.SignOut) {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => LoginPage()),
        );
      }
    }
  }

我面临的问题是它在Navigator.push中说context是未定义的。我不确定是否使用Widget build(BuildContext context)itemBuilder: (BuildContext context)中定义的上下文,但我不知道如何解决其未定义的错误,以使其使用{{ 1}}。

1 个答案:

答案 0 :(得分:0)

您也必须将上下文发送到您的函数。您唯一需要做的就是这样:

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
  title: Text('Home Page'),
  actions: <Widget>[
    PopupMenuButton<String>(
      onSelected: (choice) => choiceAction(choice, context),
      itemBuilder: (BuildContext context) {
        return MenuOptions.choices.map((String choice){
          return PopupMenuItem<String>(
            value: choice,
            child: Text(choice),
          );
        }).toList();

和您的选择操作函数应如下所示:

void choiceAction(String choice, BuildContext context) {
setState() {
  if (choice == MenuOptions.SignOut) {
    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => LoginPage()),
    );
  }
}

}