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

如何在Flutter中创建由大量线条构成的status(progress) bar?

分段进度条参考效果

原生无依赖实现方案

这个组件逻辑非常简单,完全不需要第三方库就能快速实现,核心步骤如下:

  • 先拆解组件结构:外层是进度条容器,内部包含灰色底的进度轨道、按步骤拆分的等宽分段块、标记当前位置的高亮滑块/圆点,轨道下方对应放置每个步骤的文字标签
  • 布局直接用CSS Flex实现:轨道设置display: flex,每个分段块设置flex: 1就能自动等宽铺满,已完成的分段填充成功色,当前进行中的分段填充主色,未开始的分段保持灰色底即可;高亮滑块用绝对定位,通过left属性控制位置,加transition就能实现平滑滑动的动画效果
  • 逻辑部分只需要十几行原生JS:对外暴露一个设置当前进度的方法,传入当前所在步骤/完成百分比,自动计算滑块的偏移位置,给对应分段切换状态类名就完成了

核心代码参考:

<div class="progress-wrapper">
  <!-- 进度条主体 -->
  <div class="progress-track">
    <div class="segment done"></div>
    <div class="segment done"></div>
    <div class="segment active"></div>
    <div class="segment"></div>
    <div class="current-pointer"></div>
  </div>
  <!-- 步骤标签 -->
  <div class="label-group">
    <span>提交申请</span>
    <span>材料审核</span>
    <span>处理中</span>
    <span>完成</span>
  </div>
</div>
.progress-track {
  position: relative;
  display: flex;
  width: 100%;
  height: 6px;
  border-radius: 3px;
  background: #e2e8f0;
  overflow: hidden;
}
.segment {
  flex: 1;
  border-right: 2px solid #fff;
}
.segment.done {
  background: #10b981;
}
.segment.active {
  background: #2563eb;
}
.current-pointer {
  position: absolute;
  top: 50%;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #2563eb;
  transform: translate(-50%, -50%);
  transition: left .25s ease;
  /* 动态设置left值即可移动滑块,比如走到第3个分段(共4段)时left设为62.5% */
  left: 62.5%;
}
.label-group {
  display: flex;
  justify-content: space-between;
  margin-top: 10px;
  font-size: 12px;
  color: #64748b;
}

整套实现(含样式、交互逻辑)代码量不超过120行,没有任何额外依赖,加载速度最快,还能100%按设计稿调整样式,不存在第三方库默认样式改不动的问题。

要不要用第三方库?

没有绝对的优劣,完全看项目场景:

  • 如果只是单个页面用到这个进度条,样式固定、后续没有复杂的迭代需求,直接原生写的成本远低于引入第三方库,完全没必要为了一个小组件增加包体积
  • 如果你的项目本身已经引入了成套UI组件库,或者后续要做步骤点击跳转、异步加载状态、异常状态提示、多端兼容等复杂交互,用成熟的第三方库效率更高,省掉自己处理边界case、做兼容维护的成本
可选的第三方库推荐

根据项目技术栈选就行:

  • React技术栈:如果已经用了Ant Design、MUI这类组件库,直接用内置的Steps/Progress组件就能拼出这个效果,支持自定义分段颜色、节点样式;如果不想引整套UI库,可以选rc-progress这个单功能组件,轻量灵活
  • Vue技术栈:直接用Element Plus、Naive UI、Vuetify内置的步骤条/进度条组件即可,开箱即用,配置项足够覆盖这个样式需求
  • 无框架/原生JS场景:可以选progressbar.js,gzip后体积不到5KB,支持自定义分段形态、动画效果,没有额外依赖

内容的提问来源于stack exchange,提问作者Milos N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:54:21