GestureDetector 仅检测内部小部件的点击

GestureDetector detects clicks only on widget inside

我需要我的应用程序在我点击屏幕上的任意位置时将背景颜色更改为任意随机颜色。我试图使用 GestureDetector,但它仅在我点击文本时有效,但我不明白为什么会这样。

class _MyAppState extends State<MyApp> {
Color _color;

void changeColor() {
setState(() => _color = Colors.primaries[Random().nextInt(Colors.primaries.length)]);
}



@override
Widget build(BuildContext context) {
return Scaffold(
  body: GestureDetector(
  onTap: () => changeColor(),
  child: Container(
    color: _color,
    child: Center(
      child: Text('Hey there'),
    ),
  ),
),
);
}
}

只需将行为添加为不透明,这将允许它检测 child 之外的手势。

@override
Widget build(BuildContext context) {
return Scaffold(
  body: GestureDetector(
  behavior: HitTestBehavior.opaque,
  onTap: () => changeColor(),
  child: Container(
    color: _color,
    child: Center(
      child: Text('Hey there'),
    ),
  ),
),
);
}

behavior: HitTestBehavior.translucent 添加到您的 GestureDetector

 body: GestureDetector(
                behavior: HitTestBehavior.translucent, // add this
              onTap: () => changeColor(),
              child: Container(
                color: _color,
                child: Center(
                  child: Text('Hey there'),
                ),
              ),
            ),