如何在flutter中使全局类型上下文变量可变?

时间:2019-05-15 07:42:30

标签: dart flutter

当我试图从一个页面导航到另一页面时,我只是想出了一个问题。 Navigation.push 方法需要上下文变量,我需要引用上下文进行导航。

Widget navBox(Color aColor, double left, double top, Icon icon,String action, Route route) {
  return Positioned (
        left: left,
        top: top,
        child: InkWell(
          borderRadius: BorderRadius.circular(30.0),
            onTap: () {
              Navigator.push(context, route);
            },
            child: new Container(
            height: 220.0,
            width: 220.0,
            decoration: BoxDecoration(
              color: aColor,
              borderRadius: BorderRadius.circular(30.0),
            ),
            child: Padding(
              padding: EdgeInsets.all(40.0),
                child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  icon,
                  new Text(action, style: TextStyle(color: Colors.white, fontSize: 20.0, fontFamily: 'Oxygen')),
                ],
              ),
            ),
           ),
          ),
        );
}

我希望通过调用此函数并定义正确的路线来导航到另一页。

我收到如下错误:

在处理手势时引发了以下NoSuchMethodError

方法'ancestorStateOfType'在null上调用。

2 个答案:

答案 0 :(得分:2)

只需在方法的签名中添加一个context参数即可。但也要记住,方法不应包含太多参数,因为它会使它们更难使用。

答案 1 :(得分:0)

用新的Builder或Material小部件包装InkWell即可解决问题。

以下是我如何解决此问题的摘要:

child: new Container(
            height: 220.0,
            width: 220.0,
            decoration: BoxDecoration(
              color: aColor,
              borderRadius: BorderRadius.circular(30.0),
            ),
            child: new Builder(
              builder: (context) => InkWell(
                onTap: () {
                  Navigator.push(context,
                                 MaterialPageRoute(builder: (context) => GetData()),);
                },
                child: Padding(
                  padding: EdgeInsets.all(40.0),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: <Widget>[
                        icon,
                        new Text(action, style: TextStyle(color: Colors.white, fontSize: 20.0, fontFamily: 'Oxygen')),
                ],
              ),
            ),
              ),
            ),
           ),

我只列出该函数的Container小部件。所以其余的可以自己弄清楚。