You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Slidable搭配Card时ListTile内容覆盖问题求助

解决Card嵌套Slidable时滑动内容覆盖的问题

问题根源

Card组件默认clipBehavior为Clip.none,内部Slidable滑动时,ListTile内容会超出Card边界显示,造成视觉上的覆盖效果;同时当前Card包裹Slidable的层级结构也容易引发这类布局冲突。

解决方案1:给Card添加裁剪行为

通过设置clipBehavior: Clip.hardEdge,让Card自动裁剪超出自身边界的子组件内容:

Card(
  clipBehavior: Clip.hardEdge, // 新增裁剪配置
  child: Slidable(
    endActionPane: ActionPane(motion: const DrawerMotion(), children: [
      Expanded(
        child: Container(
            decoration: BoxDecoration(
                borderRadius: const BorderRadius.only(
                    bottomRight: Radius.circular(10),
                    topRight: Radius.circular(10)),
                gradient: customColors.progressBarGradient),
            child: Row(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                IconButton(
                    onPressed: () {},
                    icon: const Icon(Icons.local_phone_rounded,
                        color: Colors.white)),
                IconButton(
                    onPressed: () {},
                    icon: const Icon(Icons.mail_outlined,
                        color: Colors.white)),
                IconButton(
                    onPressed: () {},
                    icon: const Icon(Icons.mail_outlined,
                        color: Colors.white))
              ],
            )))
    ]),
    child: ListTile(
        dense: true,
        leading: const AccountIcon(size: 42),
        title: Text('KOO KIAN KEAT'),
        subtitle:
            Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
          Text('----')
        ])),
  ),
);

解决方案2:调整组件层级(推荐)

将Slidable作为外层组件,Card作为Slidable的子组件,滑动时整个Card会向一侧偏移,ActionPane在Card后方显示,从根源避免覆盖问题:

Slidable(
  endActionPane: ActionPane(motion: const DrawerMotion(), children: [
    Expanded(
      child: Container(
          decoration: BoxDecoration(
              borderRadius: const BorderRadius.only(
                  bottomRight: Radius.circular(10),
                  topRight: Radius.circular(10)),
              gradient: customColors.progressBarGradient),
          child: Row(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              IconButton(
                  onPressed: () {},
                  icon: const Icon(Icons.local_phone_rounded,
                      color: Colors.white)),
              IconButton(
                  onPressed: () {},
                  icon: const Icon(Icons.mail_outlined,
                      color: Colors.white)),
              IconButton(
                  onPressed: () {},
                  icon: const Icon(Icons.mail_outlined,
                      color: Colors.white))
            ],
          )))
  ]),
  child: Card(
    child: ListTile(
        dense: true,
        leading: const AccountIcon(size: 42),
        title: Text('KOO KIAN KEAT'),
        subtitle:
            Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
          Text('----')
        ])),
  ),
);

方案说明

  • 方案1适合需要保留Card包裹Slidable结构的场景,快速解决溢出问题。
  • 方案2更贴合Slidable的常规交互逻辑,滑动体验更自然,彻底规避内容覆盖问题。

内容的提问来源于stack exchange,提问作者Leong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:44:57