【问题标题】:on flutter Widget without context cant use Navigator.push function on onPressed在没有上下文的颤振小部件上无法在 onPressed 上使用 Navigator.push 功能
【发布时间】:2020-11-13 07:09:30
【问题描述】:

如果进入一个小部件,我尝试使用 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: 错误:getter 'context' 没有为类 'UserProfile' 定义。

  • “UserProfile”来自“package:speedoo/pages/profilepage.dart”(“lib/pages/profilepage.dart”)。 尝试将名称更正为现有 getter 的名称,或定义一个名为“context”的 getter 或字段。 Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));

【问题讨论】:

  • 分享错误以及更多代码,以便为我们提供此 getter 所在位置的上下文。此外,在某处提供包含Navigator.push 的代码。您发布的代码在任何地方都没有Navigator.push
  • 编辑错误

标签: flutter


【解决方案1】:

BuildContext 不是 Flutter 应用程序中全局可用的东西。 UserProfile 类可能不是 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()));

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

【讨论】:

    猜你喜欢
    • 2019-07-24
    • 2021-04-03
    • 1970-01-01
    • 2019-08-13
    • 2022-06-26
    • 2019-12-12
    • 2023-02-02
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多