Dart GridView onTap仅在创建期间调用

Dart GridView onTap仅在创建期间调用,dart,flutter,Dart,Flutter,我给孩子们做了一个GridView,每个孩子都有一个GestureDetector和一个onTap方法集。但onTap事件仅在创建视图时调用,而不是在点击项目时调用。我做错了什么 class MyGridView extends StatelessWidget { @override Widget build(BuildContext context) { return new Column( children: <Widget>[

我给孩子们做了一个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')
        )
    );
  }
}
MyGridView类扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回新列( 儿童:[ 新扩展( 子项:新建GridView.count( 交叉轴计数:2, 儿童:[ 新项目(0), 新议程项目(1) ] ) ) ] ); } } 类GridItem扩展了无状态小部件{ 最终整数码; GridItem(此代码); @凌驾 小部件构建(构建上下文){ 返回新的手势检测器( onTap:打印(代码), 子容器:新容器( 身高:48.0, 子项:新文本(“$code”) ) ); } } 您需要:


onTap:(){打印(代码);},

您要做的是调用print,然后将print的返回值(将为null)保存为onTap处理程序,这实际上禁用了onTap处理程序。如果您在日志中看到任何内容,它将是从您实际执行构建时开始的,而不是在您点击时。

您想要:


onTap:(){打印(代码);},

您要做的是调用print,然后将print的返回值(将为null)保存为onTap处理程序,这实际上禁用了onTap处理程序。如果您在日志中看到任何内容,它将是从您实际执行构建时开始的,而不是在您点击时