Я хотел бы создать Widget
, который может определять, когда пользователь нажимает на него. Для этого я использовал GestureGetector
с функцией onTap
для его обнаружения. Однако, если дочерний элемент содержит кнопку, обратный вызов onTap
никогда не вызывается.
Вот пример:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: MyWidget(
child: UnkownWidget(),
),
),
);
}
class MyWidget extends StatelessWidget {
const MyWidget({
@required this.child,
});
final Widget child;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
print('tapped');
},
child: Container(
width: 200.0,
height: 200.0,
color: Colors.blue,
child: child,
alignment: Alignment.center,
),
),
);
}
}
class UnkownWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: 150.0,
height: 150.0,
color: Colors.red,
child: TextButton(
child: Text('Button'),
onPressed: () {
print('Button pressed');
},
),
);
}
}
Когда я нажимаю на синий Container
, я вижу tapped
в консоли, но когда я нажимаю на красный, я вижу только Button pressed
(а не tapped
), но я бы хотел, чтобы запускались оба обратных вызова.
Я пробовал с HitTestBehavior.deferToChild
/ HitTestBehavior.translucent
/ HitTestBehavior.opaque
, но ничего не изменилось.
Я также должен указать, что у меня нет никакого контроля над UnkownWidget
, поскольку это может быть что угодно, и я все еще хочу, чтобы UnkownWidget
вел себя должным образом (по-прежнему запускался нажатием на его кнопки).
Как я могу этого добиться?