首页 > 解决方案 > 如何在 BuildContext 之外的 Flutter 中使用路由?

问题描述

我正在尝试在 Flutter 中使用路由。按下选项卡时,我想导航到该页面。我已经包含了我尝试过的代码。

但是,这不起作用,因为上下文未定义。

有没有办法可以使用路由来完成这个功能?

void choiceAction(String choice) {
  if (choice == Tabs.Settings) {
    print('Settings');
  }
  else if (choice == Tabs.Tutorial) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => OnBoarding()),
    );
  }
}

更新: 我正在从 PopupMenuButton 调用choiceAction。

PopupMenuButton<String>(
                                      icon: Icon(
                                        Icons.settings,
                                        color: Colors.white,
                                        size: 30.0,
                                      ),
                                      onSelected: choiceAction("Tutorial", context),
                                      itemBuilder: (BuildContext context) {
                                        return Tabs.choices.map((String choice) {
                                          return PopupMenuItem<String>(
                                            value: choice,
                                            child: Text(choice),
                                          );
                                        }).toList();
                                      },
                                    )

标签: dartflutter

解决方案


您可以BuildContext为您的方法添加变量,choiceAction并且每当您调用此方法时,传递当前上下文。

void choiceAction(String choice, BuildContext context) {
  if (choice == Tabs.Settings) {
    print('Settings');
  }
  else if (choice == Tabs.Tutorial) {
    Navigator.push(context, MaterialPageRoute(builder: (context) => OnBoarding()));
  }
}

choiceAction从某处调用该方法

@override
Widget build(BuildContext context) {
  return RaisedButton(
    "Go to next page",
    onPressed: choiceAction("choice 1", context),
  );
} 

推荐阅读