导航未定义名称上下文

Navigation Undefined name Context

我目前正在查看在我的应用程序中使用不同屏幕进行导航,到目前为止我可以从 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),
          ),
        ),
      ],
    );
  }

}

很简单,只需将 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

让您的方法接受您的 context 作为参数

Widget eventsButton(BuildContext context)

并在上下文中调用它:eventsButton(context),