当我试图从一个页面导航到另一页面时,我只是想出了一个问题。 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上调用。
答案 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小部件。所以其余的可以自己弄清楚。