dart - 如何在 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();
},
)
解决方案
您可以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),
);
}
推荐阅读
- ssas - 是否可以在 SSAS 表格模型中隐藏属性层次结构的(全部)级别
- angular - 清除表单时如何重置日期字段
- hadoop - 作为 oozie 操作的一部分,如何检查 hdfs 目录的累积大小?
- pyspark - 如何从驱动器中读取 zip 文件
- selenium - 将 GOCD 与 Selenium BDD 框架一起使用
- spring-mvc - 如何使用 ConcurrentWebSocketSessionDecorator 通过 websocket 发送我的消息
- commercetools - 为什么项目中不支持语言环境?
- deployment - 如何将基于 pytorch 的 GAN 模型部署到 android
- docker - 如何使用环境值inisde kubernetes yaml文件
- c# - Crystal Reports 中的动态图像不一致