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

如何为Flutter Toggle Buttons仅设置底部边框?

给Flutter ToggleButtons设置仅底部边框的实现方法

方法一:直接配置ToggleButtons的border属性

通过Border类仅定义底部边框,其余边框宽度设为0,就能实现只显示底部边框的效果:

ToggleButtons(
  isSelected: [true, false, false],
  // 仅设置底部边框,其余边隐藏
  border: Border(
    bottom: BorderSide(
      color: Colors.grey.shade300,
      width: 1.0,
    ),
    top: BorderSide(width: 0),
    left: BorderSide(width: 0),
    right: BorderSide(width: 0),
  ),
  // 选中时的底部边框颜色
  selectedBorderColor: Colors.blue,
  children: const [
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
      child: Text('选项A'),
    ),
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
      child: Text('选项B'),
    ),
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
      child: Text('选项C'),
    ),
  ],
  onPressed: (int index) {
    // 处理选中状态切换逻辑
  },
)

方法二:用Container包裹实现统一底部边框

如果需要给整个ToggleButtons组添加一条统一的底部边框,可将组件放入Container中,通过容器的decoration设置边框,同时去掉ToggleButtons自带的边框:

Container(
  decoration: BoxDecoration(
    border: Border(
      bottom: BorderSide(
        color: Colors.grey.shade200,
        width: 1.0,
      ),
    ),
  ),
  child: ToggleButtons(
    isSelected: [true, false, false],
    border: InputBorder.none, // 移除自带边框
    selectedColor: Colors.blue,
    children: const [
      Padding(
        padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
        child: Text('全部'),
      ),
      Padding(
        padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
        child: Text('未完成'),
      ),
      Padding(
        padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
        child: Text('已完成'),
      ),
    ],
    onPressed: (int index) {
      // 处理选中状态切换逻辑
    },
  ),
)

方法三:实现选中按钮的底部高亮效果

如果需要选中的按钮底部有更突出的样式(比如更粗的颜色边框),可以结合selectedBorderWidth和selectedBorderColor来实现:

// 先定义选中状态列表
List<bool> _selected = [true, false, false];

// 组件代码
ToggleButtons(
  isSelected: _selected,
  border: Border(
    bottom: BorderSide(
      color: Colors.grey.shade300,
      width: 1.0,
    ),
    top: BorderSide.none,
    left: BorderSide.none,
    right: BorderSide.none,
  ),
  selectedBorderColor: Colors.blue,
  selectedBorderWidth: 2.0, // 选中时底部边框加粗
  children: const [
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
      child: Text('首页'),
    ),
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
      child: Text('分类'),
    ),
    Padding(
      padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
      child: Text('我的'),
    ),
  ],
  onPressed: (int index) {
    setState(() {
      _selected = List.generate(3, (i) => i == index);
    });
  },
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:20