【问题标题】:Flutter: Use choice function with PopupMenuButton to navigate to another pageFlutter:使用带有 PopupMenuButton 的选择功能导航到另一个页面
【发布时间】:2020-03-14 02:39:08
【问题描述】:

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

简化后的代码如下所示:

@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) 中定义的上下文,并且我不知道如何修复未定义的错误以使其使用在onSelected 中调用它的定义。

【问题讨论】:

  • 可以传递上下文:onSelected: () =&gt; choiceAction(context).

标签: flutter dart


【解决方案1】:

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

@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()),
    );
    }
  }
}

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 2021-02-11
    • 2022-08-02
    • 2021-09-11
    • 2020-09-03
    • 1970-01-01
    • 2019-12-24
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多