如何使堆栈中的两个小部件可点击?

问题描述 投票:0回答:2

我正在尝试使堆栈中的两个小部件可单击。第一个小部件填充整个屏幕,第二个小部件在其顶部有一些按钮。两个小部件都有可点击区域。然而,顶部小部件只允许在其自身上注册点击。我尝试过使用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 点击。

flutter stack clickable
2个回答
0
投票

gestureDetector包裹最上面的小部件(第一个小部件填充整个屏幕)并给它行为:HitTestBehavior.translucent,


0
投票

您尝试过

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),
            ),
          ),
        ],
      ),
© www.soinside.com 2019 - 2024. All rights reserved.