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 处理程序。如果您在日志中看到任何内容,那将是您实际进行构建的时间,而不是您点击时的时间。