EarlOfEgo EarlOfEgo - 9 months ago 42
Dart Question

GridView onTap is only called during creation

I made a GridView with children that each has a

GestureDetector
and a
onTap
method set. But the onTap event gets called only when the view is created and not when the item has been tapped. What am I doing wrong here?

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')
)
);
}
}

Answer Source

You want:

onTap: () { print(code); },

What you're doing is calling print, then saving the return value from print (which will be a null) as the onTap handler, which actually disables the onTap handler. If you see anything in the logs it'll be from the time you actually did the build, not when you tapped.