Flutter + OpenHarmony 进度条组件开发实战

Flutter 自定义实现时间轴、侧边进度条 以上就是实现 Flutter 自定义时间轴和侧边进度条的步骤。这两个控件都可以为应用程序增加更好的视觉效果和交互体验。希望本文对你有所帮助!如果你有任何问题或建议,请在下方留言。 阅读详情

Flutter + OpenHarmony 进度条组件开发实战

欢迎加入开源鸿蒙跨平台社区→ https://openharmonycrosplatform.youkuaiyun.com

一、效果展示

📱 运行效果预览

在鸿蒙虚拟机上运行后的实际效果如下:

线性进度条 :

  • 水平方向的进度条,显示"下载进度"

  • 滑动下方滑块可实时调整进度值

  • 右侧显示百分比标签(如65%)

  • 带有淡入和滑动动画效果
    圆形进度条 :

  • 三种尺寸并排展示:小(40px)、中(60px)、大(100px)

  • 圆环中心显示百分比数字

  • 支持滑动调整进度

  • 使用TweenAnimationBuilder实现平滑过渡动画
    分段进度条 :

  • 8个独立的小方块组成

  • 显示"步骤完成"标签和"5/8"计数

  • 每个方块有独立的淡入和缩放动画

  • 视觉效果清晰直观
    渐变进度条 :

  • 使用紫-蓝-青三色渐变

  • 显示"渐变效果"标签

  • 支持自定义任意渐变方案

  • 动画流畅自然
    不确定进度 :

  • 线性和圆形两种不确定进度指示器

  • 持续旋转/移动,表示加载中状态

  • 适用于无法预估时间的场景

🎨 四种样式对比图示

线性进度条:
┌───────────────────────────────────
─┐
│████████████████░░░░░░░░░░░░░░░░░░░
░│ 65%
└───────────────────────────────────
─┘

圆形进度条:
      ╭───────╮
     ╱         ╲
    │           │
    │    75%    │  ← 中心显示百分比
    │           │
     ╲         ╱
      ╰───────╯

分段进度条:
┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐
│██││██││██││██││██││░░││░░││░░│
└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘
 5/8 段已完成

渐变进度条:
┌───────────────────────────────────
─┐
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░│
 80%
└───────────────────────────────────
─┘
  ↑ 紫→蓝→青 渐变效果

二、组件概述

进度条(Progress Indicator)是用户界面中最基础也是最重要的反馈元素之一。它用于向用户展示操作的完成进度、加载状态或等待时间。在 OpenHarmony 环境下开发 Flutter 应用时,一个高质量的进度条组件需要支持多种视觉样式、尺寸规格、动画效果和自定义能力。

本文将详细介绍如何在 Flutter + OpenHarmony 项目中实现一个功能完善的进度条组件系统,涵盖线性、圆形、分段和渐变四种主流样式。

三、核心功能特性

本组件专为鸿蒙生态设计,具备以下核心优势:

✅ 四种进度样式 - 线性、圆形、分段、渐变,覆盖所有场景
✅ 三种尺寸规格 - 小、中、大,适配不同布局需求
✅ 渐变效果支持 - 支持任意多色渐变方案
✅ 百分比标签显示 - 可选的进度数值展示
✅ 流畅动画过渡 - 基于 flutter_animate 的专业动效
✅ 完全可定制 - 颜色、粗细、圆角、高度全部可配
✅ 不确定进度支持 - 加载中状态的无限循环动画

四、技术实现架构

4.1 进度样式枚举

enum ProgressStyle { 
  linear,    // 线性进度条 - 最常用
  circular,  // 圆形进度环 - 适合空间受
  限
  segmented, // 分段进度条 - 步骤指示
  gradient   // 渐变进度条 - 视觉强调
}

4.2 尺寸规格枚举

enum ProgressSize { 
  small,  // 小尺寸 - 紧凑布局
  medium, // 中尺寸 - 默认选择
  large   // 大尺寸 - 强调显示
}

4.3 核心属性配置

class CustomProgress extends 
StatelessWidget {
  final double? 
  value;              // 进度值 0.
  0-1.0
  final ProgressStyle 
  style;        // 进度样式
  final ProgressSize 
  size;          // 尺寸规格
  final Color? 
  backgroundColor;     // 背景色
  final Color? 
  progressColor;       // 进度色
  final double 
  strokeWidth;         // 圆形进度条
  线宽
  final double 
  borderRadius;        // 圆角半径
  final bool 
  showLabel;             // 是否显示
  标签
  final String? 
  label;              // 自定义标签文
  本
  final Widget? 
  indicator;          // 自定义指示器
  final Gradient? 
  gradient;         // 渐变配置
  final double 
  height;              // 线性进度条
  高度
  final int 
  segments;               // 分段数量
  final double 
  segmentGap;          // 分段间距
  
  const CustomProgress({
    super.key,
    this.value,
    this.style = ProgressStyle.
    linear,
    this.size = ProgressSize.medium,
    // ... 其他参数
  });
}

五、线性进度条实现

5.1 核心渲染逻辑

Widget _buildLinearProgress(Color 
bgColor, Color pColor, bool isDark) 
{
  final progressHeight = _getHeight
  ();
  final actualValue = value?.clamp
  (0.0, 1.0) ?? 0.0;

  return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      // 可选的标签行
      if (showLabel || label != 
      null)
        Padding(
          padding: const EdgeInsets.
          only(bottom: 8),
          child: Row(
            mainAxisAlignment: 
            MainAxisAlignment.
            spaceBetween,
            children: [
              Text(
                label ?? '进度',
                style: TextStyle(
                  fontSize: 14,
                  color: isDark ? 
                  Colors.grey[300] 
                  : Colors.grey
                  [700],
                ),
              ),
              Text(
                '${(actualValue * 
                100).toInt()}%',
                style: TextStyle(
                  fontSize: 14,
                  fontWeight: 
                  FontWeight.w600,
                  color: pColor,
                ),
              ),
            ],
          ),
        ),
      
      // 进度条容器
      Container(
        height: progressHeight,
        decoration: BoxDecoration(
          color: bgColor,
          borderRadius: 
          BorderRadius.circular
          (borderRadius),
        ),
        child: LayoutBuilder(
          builder: (context, 
          constraints) {
            return Stack(
              children: [
                // 进度填充
                AnimatedContainer(
                  duration: const 
                  Duration
                  (milliseconds: 
                  300),
                  width: 
                  constraints.
                  maxWidth * 
                  actualValue,
                  decoration: 
                  BoxDecoration(
                    color: pColor,
                    borderRadius: 
                    BorderRadius.
                    circular
                    (borderRadius),
                  ),
                ).animate()
                 .fadeIn(duration: 
                 300.ms)
                 .slideX(begin: -0.
                 1, end: 0),
                 
                // 可选的自定义指示器
                if (indicator != 
                null)
                  Positioned(
                    left: 
                    constraints.
                    maxWidth * 
                    actualValue - 
                    12,
                    top: -20,
                    child: 
                    indicator!,
                  ),
              ],
            );
          },
        ),
      ),
    ],
  );
}

技术要点 :

  • clamp(0.0, 1.0) 确保进度值在合法范围内
  • AnimatedContainer 实现平滑的宽度变化
  • LayoutBuilder 获取父容器宽度用于计算进度条宽度
  • Stack 支持叠加自定义指示器

5.2 尺寸自适应

double _getHeight() {
  switch (size) {
    case ProgressSize.small:
      return height * 0.6;   // 小尺
      寸:基准高度×0.6
    case ProgressSize.medium:
      return height;         // 中尺
      寸:基准高度
    case ProgressSize.large:
      return height * 1.5;   // 大尺
      寸:基准高度×1.5
  }
}

六、圆形进度条实现

6.1 双层圆环设计

Widget _buildCircularProgress(Color 
bgColor, Color pColor, bool isDark) 
{
  final actualValue = value?.clamp
  (0.0, 1.0) ?? 0.0;
  final size = _getCircularSize();

  return SizedBox(
    width: size,
    height: size,
    child: Stack(
      alignment: Alignment.center,
      children: [
        // 背景圆环(灰色)
        SizedBox(
          width: size,
          height: size,
          child: 
          CircularProgressIndicator(
            value: 1.0,  // 完整圆环
            strokeWidth: 
            strokeWidth,
            valueColor: 
            AlwaysStoppedAnimation<C
            olor>(bgColor),
          ),
        ),
        
        // 进度圆环(主题色)
        SizedBox(
          width: size,
          height: size,
          child: 
          TweenAnimationBuilder<doub
          le>(
            tween: Tween(begin: 0.
            0, end: actualValue),
            duration: const Duration
            (milliseconds: 800),
            curve: Curves.
            easeOutCubic,
            builder: (context, 
            animatedValue, child) {
              return 
              CircularProgressIndica
              tor(
                value: 
                animatedValue,
                strokeWidth: 
                strokeWidth,
                valueColor: 
                AlwaysStoppedAnimati
                on<Color>(pColor),
                strokeCap: 
                StrokeCap.
                round,  // 圆角端点
              );
            },
          ),
        ),
        
        // 中心百分比标签
        if (showLabel)
          Text(
            '${(actualValue * 100).
            toInt()}%',
            style: TextStyle(
              fontSize: size > 60 ? 
              16 : 12,
              fontWeight: 
              FontWeight.w600,
              color: isDark ? 
              Colors.white : Colors.
              black87,
            ),
          ),
      ],
    ),
  );
}

技术要点 :

  • 使用两个 CircularProgressIndicator 叠加
  • 底层为完整背景圆环,上层为进度圆环
  • TweenAnimationBuilder 实现从0到目标值的平滑动画
  • Curves.easeOutCubic 提供自然的减速效果
  • strokeCap: StrokeCap.round 让端点更圆润

6.2 圆形尺寸映射

double _getCircularSize() {
  switch (size) {
    case ProgressSize.small:
      return 40;   // 小尺寸:40px
    case ProgressSize.medium:
      return 60;   // 中尺寸:60px
    case ProgressSize.large:
      return 100;  // 大尺寸:100px
  }
}

七、分段进度条实现

7.1 多方块布局

Widget _buildSegmentedProgress
(Color bgColor, Color pColor, bool 
isDark) {
  final actualValue = value?.clamp
  (0.0, 1.0) ?? 0.0;
  final filledSegments = 
  (actualValue * segments).round();

  return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      // 标签行
      if (showLabel || label != 
      null)
        Padding(
          padding: const EdgeInsets.
          only(bottom: 8),
          child: Row(
            mainAxisAlignment: 
            MainAxisAlignment.
            spaceBetween,
            children: [
              Text(label ?? '进度', 
              style: TextStyle
              (fontSize: 14)),
              Text('$filledSegments/
              $segments', style: 
              TextStyle(fontSize: 
              14, fontWeight: 
              FontWeight.w600)),
            ],
          ),
        ),
      
      // 分段方块行
      Row(
        children: List.generate
        (segments, (index) {
          final isFilled = index < 
          filledSegments;
          return Expanded(
            child: Container(
              height: _getHeight(),
              margin: EdgeInsets.
              only(right: index < 
              segments - 1 ? 
              segmentGap : 0),
              decoration: 
              BoxDecoration(
                color: isFilled ? 
                pColor : bgColor,
                borderRadius: 
                BorderRadius.
                circular
                (borderRadius),
              ),
            ).animate()
             .fadeIn(delay: (index 
             * 50).ms)  // 延迟淡入
             .scale(begin: const 
             Offset(0.8, 0.8), end: 
             const Offset(1, 1));
          });
        }),
      ),
    ],
  );
}

技术要点 :

  • List.generate 动态生成指定数量的方块
  • Expanded 让每个方块平均分配宽度
  • margin 控制方块间距(最后一个不加)
  • 延迟动画( index * 50.ms )产生波浪式入场效果
  • 缩放动画让方块从小到大弹出

7.2 分段计算逻辑

final filledSegments = (actualValue 
* segments).round();

例如:进度值0.7,分段数10,则填充7个方块。

八、渐变进度条实现

8.1 渐变效果渲染

Widget _buildGradientProgress(Color 
bgColor, bool isDark) {
  final actualValue = value?.clamp
  (0.0, 1.0) ?? 0.0;
  final progressHeight = _getHeight
  ();

  return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
      // 标签行
      if (showLabel || label != 
      null)
        Padding(
          padding: const EdgeInsets.
          only(bottom: 8),
          child: Row(
            mainAxisAlignment: 
            MainAxisAlignment.
            spaceBetween,
            children: [
              Text(label ?? '进度', 
              style: TextStyle
              (fontSize: 14)),
              Text(
                '${(actualValue * 
                100).toInt()}%',
                style: TextStyle(
                  fontSize: 14,
                  fontWeight: 
                  FontWeight.w600,
                  color: gradient?.
                  colors.first ?? 
                  Theme.of(context).
                  colorScheme.
                  primary,
                ),
              ),
            ],
          ),
        ),
      
      // 渐变进度条
      Container(
        height: progressHeight,
        decoration: BoxDecoration(
          color: bgColor,
          borderRadius: 
          BorderRadius.circular
          (borderRadius),
        ),
        child: LayoutBuilder(
          builder: (context, 
          constraints) {
            return Stack(
              children: [
                AnimatedContainer(
                  duration: const 
                  Duration
                  (milliseconds: 
                  300),
                  width: 
                  constraints.
                  maxWidth * 
                  actualValue,
                  decoration: 
                  BoxDecoration(
                    gradient: 
                    gradient ?? 
                    LinearGradient(
                      colors: [
                        Theme.of
                        (context).
                        colorScheme.
                        primary,
                        Theme.of
                        (context).
                        colorScheme.
                        secondary,
                      ],
                    ),
                    borderRadius: 
                    BorderRadius.
                    circular
                    (borderRadius),
                  ),
                ).animate()
                 .fadeIn(duration: 
                 300.ms)
                 .slideX(begin: -0.
                 1, end: 0),
              ],
            );
          },
        ),
      ),
    ],
  );
}

技术要点 :

  • 使用 LinearGradient 实现渐变效果
  • 支持自定义任意颜色组合
  • 默认使用主题色→次要主题色渐变
  • 与线性进度条结构相似,只是填充使用渐变

8.2 渐变配置示例

CustomProgress(
  value: 0.8,
  style: ProgressStyle.gradient,
  gradient: const LinearGradient(
    colors: [Colors.purple, Colors.
    blue, Colors.cyan],
  ),
)

九、OpenHarmony 平台集成指南

9.1 在鸿蒙项目中引入组件

# 1. 将 custom_progress_widget.dart 
文件复制到 lib/widgets/ 目录
cp custom_progress_widget.dart lib/
widgets/

# 2. 在需要使用的页面导入
import 'package:demo1/widgets/
custom_progress_widget.dart';

9.2 在设置页面添加入口

// settings_page.dart 中添加导航项
_buildNavigationTile(
  isDark,
  icon: Icons.linear_scale,
  title: '进度条',
  subtitle: '多种进度样式',
  onTap: () {
    Navigator.push(
      context,
      MaterialPageRoute(builder: 
      (context) => const 
      ProgressPreviewPage()),
    );
  },
),

9.3 在鸿蒙虚拟机运行测试

# 连接鸿蒙虚拟设备
flutter devices

# 运行应用
flutter run -d 127.0.0.1:5555

十、使用示例集锦

示例1:基础线性进度条

CustomProgress(
  value: 0.65,
  style: ProgressStyle.linear,
  showLabel: true,
  label: '下载进度',
)

运行效果 :显示"下载进度 65%"的水平进度条。

示例2:圆形进度环

CustomProgress(
  value: 0.75,
  style: ProgressStyle.circular,
  size: ProgressSize.large,
  showLabel: true,
  strokeWidth: 8,
)

运行效果 :100px的大圆形进度环,中心显示75%,线宽8px。

示例3:步骤指示分段进度

CustomProgress(
  value: 0.625,
  style: ProgressStyle.segmented,
  segments: 8,
  showLabel: true,
  label: '步骤完成',
)

运行效果 :8个方块,5个填充,显示"步骤完成 5/8"。

示例4:彩虹渐变进度条

CustomProgress(
  value: 0.8,
  style: ProgressStyle.gradient,
  showLabel: true,
  label: '渐变效果',
  gradient: const LinearGradient(
    colors: [Colors.red, Colors.
    orange, Colors.yellow, Colors.
    green, Colors.blue],
  ),
)

运行效果 :五色彩虹渐变的进度条。

示例5:自定义颜色和尺寸

CustomProgress(
  value: 0.5,
  style: ProgressStyle.linear,
  size: ProgressSize.large,
  backgroundColor: Colors.grey[300],
  progressColor: Colors.deepPurple,
  height: 12,
  borderRadius: 6,
)

运行效果 :12px高的深紫色进度条,圆角6px。

示例6:不确定进度(加载中)

// 线性不确定进度
LinearProgressIndicator(
  minHeight: 8,
  backgroundColor: Colors.grey[200],
  valueColor: 
  AlwaysStoppedAnimation<Color>
  (Colors.blue),
)

// 圆形不确定进度
CircularProgressIndicator(
  strokeWidth: 4,
  backgroundColor: Colors.grey[200],
  valueColor: 
  AlwaysStoppedAnimation<Color>
  (Colors.blue),
)

运行效果 :持续移动/旋转的加载指示器,不显示具体进度。

十一、性能优化策略

11.1 动画优化

  • AnimatedContainer :自动处理属性变化的过渡动画
  • TweenAnimationBuilder :精确控制动画的起止值和曲线
  • 延迟动画 :分段进度条的波浪式入场效果
  • flutter_animate :声明式动画,代码简洁高效

11.2 渲染优化

  • LayoutBuilder :按需计算宽度,避免硬编码
  • Stack + Positioned :高效的层叠布局
  • const 构造函数 :减少不必要的重建
  • clamp 约束 :防止非法值导致的渲染错误

11.3 内存管理

  • StatelessWidget :无状态组件,性能更优
  • 及时释放 :AnimationController 在 dispose 中释放
  • 避免重建 :使用 key 稳定组件身份

十二、常见问题解答

Q1: 如何让进度条从右向左填充?

设置 TextDirection.rtl 或使用 Transform 翻转:

Transform.flip(flipX: true, child: 
CustomProgress(...))

Q2: 如何实现条纹动画进度条?

使用 LinearGradient 配合动画控制器:

AnimatedBuilder(
  animation: controller,
  builder: (context, child) {
    return Container(
      decoration: BoxDecoration(
        gradient: LinearGradient(
          colors: [color1, color2, 
          color1],
          stops: [0, value, 1],
        ),
      ),
    );
  },
)

Q3: 如何隐藏百分比标签?

设置 showLabel: false 即可。

Q4: 如何自定义圆形进度条的起始角度?

使用 Transform.rotate 包装:

Transform.rotate(angle: -pi/2, 
child: CustomProgress(style: 
ProgressStyle.circular))

Q5: 分段进度条可以不同颜色吗?

可以修改 _buildSegmentedProgress 方法,根据 index 返回不同颜色:

color: isFilled ? colors[index % 
colors.length] : bgColor,

虚拟机运行截图
运行截图

十三、总结与展望

本文详细介绍了如何在 Flutter + OpenHarmony 环境中开发一个功能完善的进度条组件系统。该组件具备以下技术亮点:

🎯 完整的功能矩阵 - 4种样式 × 3种尺寸 = 12种组合
🎨 专业的视觉设计 - 渐变、分段、圆角、阴影
⚡ 卓越的性能表现 - GPU加速动画 + 内存安全
🔧 极简的使用方式 - 声明式API,零学习成本
🌐 完美的平台适配 - 自动适配亮暗主题

实际应用价值 :

  • 文件下载/上传进度

  • 表单填写步骤指示

  • 数据加载状态

  • 任务完成度展示

  • 游戏经验值/血量条
    后续扩展方向 :

  • 支持条纹动画效果

  • 添加波纹/脉冲动画

  • 实现多进度条组合

  • 支持RTL布局

  • 添加无障碍访问支持

Flutter+OpenHarmony健康记录App开发实践 跨平台开发框架Flutter与分布式操作系统OpenHarmony的结合,为移动应用开发带来了新的可能性。Flutter通过高性能渲染引擎和热重载功能,显著提升了UI开发效率;而OpenHarmony的分布式架构和确定性时延引擎,则为多设备协同和性能优化提供了坚实基础。这种技术组合特别适合健康监测类应用开发,能够有效处理数据聚合、可视化呈现等核心问题。通过Repository模式统一数据访问、MVVM架构管理状态,并结合fl_chart等库实现交互式图表,开发者可以构建出高效、美观的健康数据统计概览模块。 阅读详情

相关推荐

Flutter Slider 进度条

Flutter Slider 进度条

Flutter 进度条组件

模糊进度条 具体进度条 环形进度条 模糊进度条 具体进度条 设置尺寸 LinearProgressIndicator和CircularProgressIndicator没有提供设置尺寸的参数,它们是去父容器的尺寸作为绘制的边界,这时可以借助SizedBox、ConstrainedBox限制指定尺寸。 环形进度条设置尺寸 进度条动画 3秒内进度条颜色由灰色变为蓝色。 iOS风格...

xiangxiongfly 2627

【RK3588 NPU性能调优实战】多线程异步推理YOLOv5,榨干6TOPS算力

本文详细解析了如何在RK3588 NPU上通过多线程异步推理优化YOLOv5目标检测性能,实现6TOPS算力的最大化利用。通过线程池设计、流水线化帧处理及避开内存带宽瓶颈等技巧,将NPU利用率从30%提升至82%,帧率显著提高至61.2FPS。文章还提供了环境配置、代码实现及性能对比数据,助力开发者高效部署AI模型。

weixin_29034963的博客 341

简单实现一下Flutter的Stepper做一个侧边进度条

因为 flutter 提供的 Stepper 无法满足业务需求,于是只好自己实现一个了 flutter Stepper 的样式 我实现的 Stepper 这个或许根本不叫 Stepper 吧,也没有什么步骤,只是当前的配送进度,不需要数字步骤,希望所有内容都能显示出来,原生的则是有数字表示第几步,把当前步骤外的其他的内容都隐藏了。 那么开始进行分析,整个需求中,有点难度的也就是这个左边的进度线...

weixin_34187862的博客 784

RJ45以太网接口EMC设计方案

RJ45以太网接口EMC设计方案 一、 接口概述 RJ45以太网接口是目前应用最广泛的通讯设备接口,以太网口的电磁兼容性能关系到通讯设备的稳定运行。赛盛技术应用电磁兼容设计平台(EDP)软件从接口原理图、结构设计,线缆设计三个方面来设计以太网口的EMC设计方案。 二、 接口电路 原理图的EMC设计 百兆以太网接口2KV防雷滤波设计 图1 百兆以太网接口2KV防雷滤波设计 接口电路设计概述: 本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计;从设计层次解决EMC问题;同时此电路兼容了百兆以太网接

兰陵笑笑生SD的博客 1万+

华三R4900 G5服务器实战:用PMC P460-B4阵列卡配置RAID1+RAID6,并搞定CentOS 7.9安装(含热备盘设置)

本文详细解析了在华三R4900 G5服务器上使用PMC P460-B4阵列卡配置RAID1+RAID6混合阵列的全过程,包括热备盘设置和CentOS 7.9系统安装。通过实战步骤和性能优化建议,帮助企业IT人员高效部署高可用存储方案,特别适合需要数据冗余和系统稳定性的企业级应用场景。

weixin_29248653的博客 358

【Flutter】自定义分段选择器Slider

在开发一个APP的时候,需要用到一个分段选择器,系统的不满足就自己自定义了一个;可以自定义节点的数量、自定义节点的大小、自定义滑竿的粗细,自定义气泡的有无等等…基本上满足你的常用需求。

ZFJ_张福杰 1748

PMOS过压保护电路设计与仿真优化策略

本文深入探讨PMOS过压保护电路(OVP)的设计与仿真优化策略,详细解析PMOS管选型、稳压管特性及三极管配置等关键要素。通过Proteus仿真案例揭示典型设计误区,并提供响应速度提升、抗干扰设计等进阶优化方案,助力工程师实现高可靠性的电源保护系统设计。

weixin_42620340的博客 442

Flutter 进度条使用

参数详解 属性 说明 value 当前值默认 0 -- 1 之间 onChanged 滑动监听 onChangeStart 滑动前监听 onChangeEnd 滑动后监听 min 最小值默认 0 max 最大值默认 1 divisions 分段个数 label 滑动时 显示的文字(不设置divisions属性 不显示) act...

刘鑫的博客 1116

海康VM加密狗无法识别常见问题排查

海康VM加密狗无法识别常见问题排查

视觉人机器视觉的博客 2721

LabVIEW波形图表时间轴设置:三种方法实现横坐标显示日期时间

在数据采集与设备监控场景中,波形图表的横坐标默认显示采样点序号而非日期时间,这给工程师分析历史数据带来不便。理解时间标识(Timestamp)的本质——一个自1904年起算的双精度秒数,是解决问题的关键。时间轴设置既是显示格式问题,更是数据层与显示层的协同设计。通过属性节点动态生成刻度标签、将时间标识数组直接作为X轴数据、或使用波形数据(Waveform)类型绑定t0与dt,分别适用于固定点数显示、非等间隔事件记录和等间隔连续采样等不同需求。合理选择方案并注意缓冲区预分配与时间连续性处理,可让波形图表准确呈

weixin_33416697的博客 255

Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践

创建@HostApi()通过以上实践,我们成功地将Flutter的进度条组件适配到了OpenHarmony平台。使用Pigeon进行Flutter与OpenHarmony的通信:确保了Flutter应用能够与OpenHarmony原生层进行高效交互针对不同屏幕尺寸进行响应式调整:通过检测屏幕宽度,动态调整进度条高度和字体大小确保无障碍支持:为屏幕阅读器用户提供完整的进度信息通过自定义组件实现高级功能:如多任务进度显示、缓冲进度等。

weixin_45247234的博客 851

[PCIe5.0] 2.2.7.1 TPH Rules

TPH 机制通过硬件提示优化数据流,适用于高性能计算和存储场景。

系统固件工程师 350

OpenHarmony Flutter 进度条组件完整实现

本文介绍了在OpenHarmony平台上使用Flutter实现进度条组件的方法。主要内容包括线性进度条和圆形进度条的基础实现,通过LinearProgressIndicator和CircularProgressIndicator组件实现;分段进度条的开发技巧,利用Row和Expanded布局;以及高级功能如动画进度条、状态管理和样式定制。文章提供了详细的代码示例和实现要点,帮助开发者在OpenHarmony应用中快速构建功能完善、样式多样的进度条组件。

2501_94510240的博客 660

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践与优化

通过合理的设计和实现,进度条组件可以成为提升用户体验的关键元素。在OpenHarmony平台上,我们不仅需要关注UI的美观,更要关注不同设备的适配性、交互方式和无障碍支持。Flutter作为跨平台开发框架,与OpenHarmony的结合为开发者提供了强大的工具,让我们能够轻松创建出既美观又实用的进度条组件。欢迎大家加入开源鸿蒙跨平台开发者社区,一起探索更多鸿蒙跨平台开发技术!

2401_85571293的博客 900

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Flutter打造OpenHarmony进度条

Flutter进度条组件应用摘要 本文详细介绍了Flutter中LinearProgressIndicator和CircularProgressIndicator两种进度条组件的使用方法。主要内容包括: 基础实现:展示了最简单的线性/圆形进度条实现方式 自定义样式:通过参数调整进度条颜色、高度、宽度等视觉属性 高级应用:包括百分比显示、多任务进度列表、缓冲进度条等场景 企业级特性:探讨了响应式设计、无障碍支持等专业应用需求 文章提供了完整的代码示例,涵盖从基础到高级的各种进度条实现方式,并强调了用户体验设计

qq_69349606的博客 989

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Flutter for OpenHarmony 实战之基础组件:第三十三篇 ProgressIndicator — 丝滑的加载进度条

摘要 本文介绍了Flutter for OpenHarmony中进度条组件(ProgressIndicator)的实战应用。主要内容包括:1)两种基本模式(不确定模式和确定模式)的使用场景与实现方式;2)LinearProgressIndicator和CircularProgressIndicator的详细配置参数与样式定制方法;3)进阶功能如缓冲进度条的实现;4)针对OpenHarmony平台的适配建议,包括动画帧率优化、系统状态控制和视觉风格融合;5)提供完整的示例代码,展示模拟下载进度的综合应用。文章

好代码自己会说话,烂代码才需要注释来圆谎 1万+

Flutter适配OpenHarmony实战:以进度条组件打通跨平台迁移全流程

跨平台开发框架与国产操作系统的融合是当下工程实践的热点。Flutter作为成熟的高性能UI框架,其自绘引擎与组件化模型为多端适配提供了基础能力,但在迁移至OpenHarmony时,开发者常面临SDK分支差异、渲染引擎兼容性及原生交互通道等挑战。通过剖析进度条这一典型组件的适配过程,可以理解CustomPainter绘制、动画调度与性能优化在鸿蒙环境下的落地方式,并掌握组件局部刷新、纹理替代平台视图等关键技术策略。该经验适用于音视频工具、IoT应用等需高频反馈异步进度的场景,帮助团队以最小成本验证整条技术链路

weixin_31032799的博客 328

Flutter跨平台开发在OpenHarmony上的评分组件实现与优化

通过深度适配OpenHarmony平台特性,我们的Flutter评分组件在保持跨平台一致性的同时,提供了符合OpenHarmony设计规范的用户体验。通过本文的实践指导,开发者可以高效地构建出兼容OpenHarmony的高质量Flutter组件,为跨平台应用开发提供坚实基础。欢迎大家加入开源鸿蒙跨平台开发者社区,一起探索更多鸿蒙跨平台开发技术!

weixin_45247234的博客 730

OpenHarmony Flutter 评分组件开发详解

本文介绍了在OpenHarmony平台上使用Flutter实现评分组件的方法。评分组件作为常见的交互元素,需要支持星级评分、评分显示和评分统计等核心功能。文章详细讲解了技术实现方案,包括使用Icon组件显示星星、GestureDetector处理点击事件,以及通过LinearProgressIndicator展示评分分布。实现方案支持整星和半星评分,提供可编辑和只读两种模式,并介绍了添加动画效果和触觉反馈等高级功能扩展。该组件设计合理,具有清晰的视觉反馈和流畅的交互体验,适用于各类应用场景。

2501_94452576的博客 989

OpenHarmony Flutter 文件上传组件开发实战

本文介绍了在OpenHarmony平台上使用Flutter实现文件上传组件的方案。主要内容包括:1)文件上传功能的核心特性,如文件选择、进度显示和多文件管理;2)数据模型设计,使用FileItem类和FileStatus枚举清晰管理文件状态;3)UI实现细节,包括上传区域、文件列表的交互设计;4)技术实现方法,通过file_picker选择文件,模拟上传进度更新流程。该组件提供了完整的文件上传解决方案,支持多种状态显示和用户操作,适用于各类应用场景。

2301_77576302的博客 681

进度指示器组件-Flutter OpenHarmony UI设计

摘要 本文详细探讨了OpenHarmony PC端进度指示器组件的技术实现,涵盖从基础到高级的多种进度条类型。文章首先介绍了进度指示器在现代应用中的重要性,随后通过具体代码示例讲解了线性进度条、圆形进度条、渐变进度条和分段进度条的实现方法。其中重点展示了如何利用Flutter组件实现不同样式的进度反馈,包括状态管理、圆角处理、分段显示和动画效果等技术细节。针对PC端特性,文章特别强调了如何利用大屏幕优势设计更精细的视觉反馈,为开发者提供了完整的进度指示器开发方案和实践指导。

suyuhan123456的博客 1137

Flutter适配OpenHarmony:进度条组件渲染优化实践

跨端UI框架向国产操作系统迁移已成为技术热点,而渲染性能与组件兼容性始终是落地的核心挑战。Flutter依赖Ticker调度、Canvas绘制与光栅化管线完成界面呈现,在不同平台上的底层对接差异会直接影响动画流畅度。通过自绘组件与RepaintBoundary刷新隔离,可有效收窄重绘范围,显著降低帧耗时与CPU占用。在OpenHarmony设备上,进度条作为高频状态更新的基础组件,恰好覆盖动画调度、绘制指令提交、文本刷新等完整链路,成为验证引擎适配质量的绝佳切面。以进度条为切入点,详细记录从环境选型、渲染链

weixin_28025327的博客 335

基于 Flutter × OpenHarmony 构建播放器进度条区域的实践解析

在音乐播放器、视频播放器等多媒体应用中,进度条区域不仅是一个展示播放状态的 UI 组件,更是用户与内容交互的核心入口之一。它承担着时间反馈、播放控制、拖拽跳转等多重职责,其体验好坏直接影响应用的专业度。 本文将结合一个实际的 Flutter 示例,讲解在 OpenHarmony 平台下,如何基于 Flutter 构建一个交互自然、样式统一、状态清晰的播放进度条区域,并分析其背后的设计思路与跨端价值。

一键难忘的博客 464

Flutter进度条组件适配OpenHarmony的渲染优化与踩坑实践

跨平台UI组件适配的核心挑战往往不在UI实现本身,而在于渲染链路、线程模型与原生数据通道的协作。以进度条这种高频刷新组件为例,其动画持续触发视图重绘,对帧率与能耗平衡提出极高要求。在Flutter与OpenHarmony的组合下,需要理解Flutter引擎如何对接OpenHarmony图形栈、MethodChannel平台通道的线程切换机制,以及如何通过ValueNotifier、RepaintBoundary与CustomPaint等机制实现局部重绘与高效绘制。这类优化技术不仅适用于进度条,更适用于下载管

weixin_29009669的博客 191
上一篇: Flutter + OpenHarmony 浮动提示组件开发实战
下一篇: Flutter + OpenHarmony 标签选择器组件开发实战
Hello__7777
博客等级 码龄1年 79粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值