首页 > 解决方案 > 在没有上下文的颤振小部件上无法在 onPressed 上使用 Navigator.push 功能

问题描述

如果进入一个小部件,我尝试使用 onPressed 函数 Navigator.push 它返回错误这是代码

  Widget get _navigationDrawer {
    return Container(
      height: 60.0,
      child: BottomAppBar(
        color: Color(0xFF1f2032),
        elevation: 35,
          shape: CircularNotchedRectangle(),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.only(right: 35),
                child: IconButton(
                  icon: Icon(Icons.settings,color: Colors.white,),
                  onPressed: () {
                    Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));

                  },
                ),
              ),
            ],
          )),
    );
  }

如您所见, IconButton 具有 onPressed 功能,但如果我添加:

Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));

我收到此错误:编译器消息:lib/pages/profilepage.dart:62:36:错误:没有为类“UserProfile”定义吸气剂“上下文”。

标签: flutter

解决方案


BuildContext不是在颤振应用程序中全局可用的东西。UserProfileclass 可能不是 a Widget(尽管我无法确定,因为您没有提供此 getter 存在的位置),因此无法自动访问context.

这可以通过使此函数不是getter 并制作BuildContext参数来轻松解决。当您调用此函数时,请传递当时可用的任何上下文。

Widget _navigationDrawer(BuildContext context) {
    return Container(
      height: 60.0,
      child: BottomAppBar(
        color: Color(0xFF1f2032),
        elevation: 35,
          shape: CircularNotchedRectangle(),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.only(right: 35),
                child: IconButton(
                  icon: Icon(Icons.settings,color: Colors.white,),
                  onPressed: () {
                    Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));

                  },
                ),
              ),
            ],
          )),
    );
  }

推荐阅读