我制作了一个带有子节点的GridView,每个子节点都设置了GestureDetector
和onTap
方法。但只有在创建视图时才调用onTap事件,而不是在项目被点击时调用。我在这里做错了什么?
class MyGridView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Column(
children: <Widget>[
new Expanded(
child: new GridView.count(
crossAxisCount: 2,
children: [
new GridItem(0),
new GridItem(1)
]
)
)
]
);
}
}
class GridItem extends StatelessWidget {
final int code;
GridItem(this.code);
@override
Widget build(BuildContext context) {
return new GestureDetector(
onTap: print(code),
child: new Container(
height: 48.0,
child: new Text('$code')
)
);
}
}
答案 0 :(得分:6)
你想:
onTap: () { print(code); },
你正在做的是调用print,然后保存print的返回值(这将是一个null)作为onTap处理程序,它实际上禁用了onTap处理程序。如果您在日志中看到任何内容,那么它将从您实际构建时开始,而不是在您点击时。