GridView onTap 只在创建时调用
GridView onTap is only called during creation
我制作了一个包含子项的 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')
)
);
}
}
你想要:
onTap: () { print(code); },
您正在做的是调用 print,然后将来自 print 的 return 值(将为空)保存为 onTap 处理程序,这实际上禁用了 onTap 处理程序。如果您在日志中看到任何内容,那将是您实际进行构建的时间,而不是您点击时的时间。
我制作了一个包含子项的 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')
)
);
}
}
你想要:
onTap: () { print(code); },
您正在做的是调用 print,然后将来自 print 的 return 值(将为空)保存为 onTap 处理程序,这实际上禁用了 onTap 处理程序。如果您在日志中看到任何内容,那将是您实际进行构建的时间,而不是您点击时的时间。