导航未定义名称上下文
Posted
技术标签:
【中文标题】导航未定义名称上下文【英文标题】:Navigation Undefined name Context 【发布时间】:2019-01-20 16:01:00 【问题描述】:我目前正在查看在我的应用程序中使用不同屏幕进行导航,到目前为止,我可以从 LoginScreen 导航到 EventsScreen 成功。问题在于 EventsScreen 中有一个按钮,如果单击它应该带我到 LoginScreen,这是我拥有的代码。
在我的 events_screen.dart 文件中
在我的 app.dart 文件 MaterialApp 小部件中,我的路线为
Holiday 扁平按钮在单击时不会将我带到 "/HolidayScreen" 路线。
我该如何解决[dart] Undefined name 'context'?
events_screen.dart
import 'package:flutter/material.dart';
import 'holiday.dart';
class EventsScreen extends StatelessWidget
Widget build(context)
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.white,
body: Container(
alignment: Alignment.center,
margin: EdgeInsets.all(20.0),
child: ListView(
children: <Widget>[
Container(margin: EdgeInsets.only(bottom: 20.0)),
eventsButton(),
Container(margin: EdgeInsets.only(bottom: 20.0)),
],
),
),
),
);
Widget eventsButton()
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FlatButton(
color: Colors.red[800],
onPressed: () ,
child: Text(
'Events',
style: new TextStyle(color: Colors.white, fontWeight: FontWeight.normal),
),
),
Container(margin: EdgeInsets.only(right: 20.0)),
FlatButton(
color: Colors.red[800],
child: Text(
'Holidays',
style: new TextStyle(color: Colors.white, fontWeight: FontWeight.normal),
),
onPressed: ()
Navigator.pushNamed(context, "/Holiday");
,
),
Container(margin: EdgeInsets.only(right: 20.0)),
FlatButton(
color: Colors.red[800],
onPressed: () ,
child: Text(
'Flights',
style: new TextStyle(color: Colors.white, fontWeight: FontWeight.normal),
),
),
],
);
【问题讨论】:
试试 Navigator.of(context).pushReplacementNamed("/Holiday"); 将你的 events_screen.dart 更改为 Stateful ,或者只是将 buildcontext 作为参数传递 如果您需要帮助,请粘贴您的 events_screen.dart 的代码 @diegoveloper 好的 【参考方案1】:简单,只需将 BuildContext 传递给您的 eventsButton
方法
Widget build(context)
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.white,
body: Container(
alignment: Alignment.center,
margin: EdgeInsets.all(20.0),
child: ListView(
children: <Widget>[
Container(margin: EdgeInsets.only(bottom: 20.0)),
eventsButton(context),
Container(margin: EdgeInsets.only(bottom: 20.0)),
],
),
),
),
);
并在你的方法中添加一个参数
Widget eventsButton(BuildContext context)
return Row(
mainAxisAlignment: MainAxisAlignment
//...
更新
然后改变这个:
Navigator.pushNamed(context, "/Holiday");
到这里:
Navigator.pushNamed(context, "/HolidayScreen");
因为您的路线名称是 HolidayScreen 而不是 Holiday
【讨论】:
是的,错误消失了,但仍然无法导航到 HolidayScreen 它的行为就像 onPressed 方法是 null 哦,是的,现在它可以工作了。我已经看到我缺少的东西了,谢谢 很高兴为您提供帮助 :)【参考方案2】:让您的方法接受您的 context
作为参数
Widget eventsButton(BuildContext context)
并使用上下文调用它:eventsButton(context),
【讨论】:
是的,错误消失了,但仍然无法导航到 HolidayScreen 看看你的代码你写错了路由器名称Navigator.pushNamed(context, "/HolidayScreen");
而不是Navigator.pushNamed(context, "/Holiday");
以上是关于导航未定义名称上下文的主要内容,如果未能解决你的问题,请参考以下文章
颤振未定义的名称“上下文”。尝试将名称更正为已定义的名称,或定义名称
未捕获的错误:在路由器上下文之外呈现的 <Link> 无法导航。(…)反应