我正在尝试使堆栈中的两个小部件可单击。第一个小部件填充整个屏幕,第二个小部件在其顶部有一些按钮。两个小部件都有可点击区域。然而,顶部小部件只允许在其自身上注册点击。我尝试过使用ignorePointer小部件,但这会禁用其他小部件的可点击性,这不是我想要的。如何使这两个小部件都可点击?
相关代码如下:
SafeArea(
top: false,
child: Scaffold(
body: SizedBox(
height: context.height,
child: Stack(
clipBehavior: Clip.none,
children: [
Opacity(opacity: 0.9, child: Center(child: _videoPanel(viewModel))),
BroadcasterPage(viewModel: viewModel)
],
),
)),
);
BroadcasterPage 中的 InkWell 小部件工作正常。但是,不透明度小部件中的 InkWell 小部件不起作用。如果我交换 Opacity 和 BroadcasterPage 小部件,BroadcasterPage 中的 InkWell 小部件也无法工作。我想让两个 InkWell 小部件都能工作。
我用 IgnorePointer 将两个小部件包装在 Stack 中,并将其中一个的忽略值设置为 false,另一个设置为 true。我的计划是在单击正确的小部件时将忽略设置为 false,并将另一个小部件设置为 true。但是当 ignoring 为 true 时,我在 onTap 中编写的函数没有运行,因为它忽略了 Inkwell 点击。
用gestureDetector包裹最上面的小部件(第一个小部件填充整个屏幕)并给它行为:HitTestBehavior.translucent,
您尝试过
IgnorePointer
和 Listener
小部件吗?
Stack(
clipBehavior: Clip.none,
children: [
IgnorePointer(
ignoring: false, // Allow taps on this widget
child: Opacity(
opacity: 0.9,
child: Center(child: _videoPanel(viewModel)),
),
),
IgnorePointer(
ignoring: true, // Ignore taps on this widget
child: Listener(
onPointerDown: (_) {
// Handle the tap on the BroadcasterPage widget
print('BroadcasterPage tapped');
},
child: BroadcasterPage(viewModel: viewModel),
),
),
],
),