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

Flutter中如何去除RawMaterialButton的外边距?

问题描述

我编写了以下Flutter代码:

Container(
      alignment: Alignment.centerLeft,
      padding: EdgeInsets.all(0),
      color: Colors.red,
      margin: EdgeInsets.all(0),
      child: RawMaterialButton(
        constraints: BoxConstraints(minHeight: 32, maxHeight:32, minWidth:32, maxWidth:32),
        onPressed: () => {},
        fillColor: Colors.indigo,
        child: Icon(
          Icons.add,
          color: Colors.white,
        ),
        padding: EdgeInsets.all(0),
        shape: CircleBorder(),
      ),
    );

运行结果如下:
运行结果

可以看到RawMaterialButton周围存在空白,请问该如何去除这个空白?


解决方法

这个空白是RawMaterialButton的默认点击区域设置导致的——Flutter为了保证按钮有足够的可点击面积,默认会将materialTapTargetSize设为MaterialTapTargetSize.padded,强制最小点击区域为48x48,所以哪怕你已经设置了32x32的constraints,按钮周围还是会多出一圈空白。

只需要给RawMaterialButton添加materialTapTargetSize: MaterialTapTargetSize.shrinkWrap属性,让点击区域收缩到按钮实际大小即可:

修改后的代码:

Container(
      alignment: Alignment.centerLeft,
      padding: EdgeInsets.all(0),
      color: Colors.red,
      margin: EdgeInsets.all(0),
      child: RawMaterialButton(
        constraints: BoxConstraints(minHeight: 32, maxHeight:32, minWidth:32, maxWidth:32),
        onPressed: () => {},
        fillColor: Colors.indigo,
        child: Icon(
          Icons.add,
          color: Colors.white,
        ),
        padding: EdgeInsets.all(0),
        shape: CircleBorder(),
        // 让点击区域收缩到按钮实际尺寸
        materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
      ),
    );

注意:如果按钮尺寸过小(小于48x48),可能会降低用户的点击体验,建议根据实际业务场景权衡是否需要保留足够的点击区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:25