Flutter Stack+Position 未定位组件的事件会影响已经定位的组件的事件响应

文章讲述了在Flutter开发中遇到的一个问题,即在Stack组件里设置头像、搜索框和按钮组后,头像的点击事件没有响应。作者通过分析发现Stack中未定位的组件占据了所有剩余空间,覆盖了定位组件,导致事件无法触发。解决方案是调整组件顺序,让头像位于其他定位组件之上,从而恢复事件响应。
摘要由CSDN通过智能技术生成

问题

在这里插入图片描述
我这里设置了3个部分进行定位,分别是头像、搜索框、和顶部按钮组,
设置一个没有定位的组件,顶部拖拽

代码类似下面展示

Stack(
          alignment: Alignment.center,
          fit: StackFit.expand, // 未定位widget占满Stack整个空间
          children: [
            /// 左上角头像
            Positioned(
              left: 0,
              child: Person(),
            ),
			/// 窗口移动函数
            const DragWindow(),
            /// 搜索框
            Positioned(
                top: 8,
                child: SizedBox(
                  width: MediaQuery.of(context).size.width / 3,
                  height: 32,
                  child: const SearchField(
                    hintText: "搜索联系人",
                  ),
                )),

            /// 右上角按钮
            const Positioned(
                right: 0,
                child: Row(children: [
                  ControllerButton(),
                  ControllerButton(),
                  ControllerButton()
                ]))
          ]),

但是发现,输入框和右上角按钮事件有响应,但是点击头像的事件没有响应

二、解决

这个时候,我们将没有定位的组件放在所有兄弟组件的上面

在这里插入图片描述

改为
在这里插入图片描述
这样问题就解决了

三、原因

因为Stack组件中,所有的组件就像叠罗汉一样,一行一层的叠上去的,未定位的组件,默认占据所有剩余空间,所以,应该将定位组件覆盖未定位组件,使事件不被覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值