繁体   English   中英

如何在BuildContext之外的Flutter中使用路由?

[英]How to use routes in Flutter outside BuildContext?

我正在尝试在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();
                                      },
                                    )

您可以将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),
  );
} 

如果您使用的是PopupMenuButton(小部件),则BuildContext始终可见。

如何使用PopupMenuButton不同于这样的事情。
PopupMenuButton#onSelected中指定的类型为void Function(T value)

PopupMenuButton<String>(
  onSelected: (str) {
    choiceAction("Tutorial", context);
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM