导航未定义名称上下文

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> 无法导航。(…)反应

未捕获的错误:尚未为上下文加载模块名称“电子”:_。使用要求([])

名称 [jdbc/mydb] 未绑定在此上下文中