Just want to update how I did it with a workaround.
I created several GestureDetectors at the those positions where there are the icon widgets that I'd like them to react to my tapping. Basically these GestureDetectors cover those widgets. But this is not enough, I have to wrap those icon widgets with a Stack and put a dummy GestureDetector which doesn't register any callbacks to any gestures in the Stack. Only in this way can those covering GestureDetectos trigger onTap. If I remove the dummy GestureDetector in the Stack in which the icon widgets reside, the covering GestureDetectors won't work. I don't know why this works, but it does work.