Flutter for OpenHarmony: Flutter 三方库 intersperse 优雅在鸿蒙列表项间插入间隔或装饰(UI 细节处理助手)

Flutter for OpenHarmony: Flutter 三方库 intersperse 优雅在鸿蒙列表项间插入间隔或装饰(UI 细节处理助手)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

在 OpenHarmony 应用的 UI 设计中,我们经常需要在列表(List)或一排组件(Column/Row)之间插入特定的元素,例如:

  1. 在一排按钮中间插入分隔线。
  2. 在列表数据项之间插入间隙(Spacing)。
  3. 为每个组件之间添加逗号或其他符号。

常见的做法是手写 for 循环并通过索引判断。但这种方式不仅代码丑陋,且在处理动态列表时极其容易出错(例如忘记最后一个元素不加分隔符)。

intersperse 是一个极简的扩展库。它通过为 Iterable 增加一个极其直观的方法,彻底解决了“元素间插入”这一烦人的小问题。


一、核心操作图解

intersperse 提供了一种“无感插入”的流式处理方式。

[A, B, C] (原始数据)

intersperse(X)

[A, X, B, X, C] (处理后)


二、核心 API 实战

2.1 基础用法

import'package:intersperse/intersperse.dart';voidbasicUsage(){var list =["鸿蒙","Flutter","开发"];// 💡 在每个元素之间插入一条分隔线文本var result = list.intersperse("|");print(result.toList());// ["鸿蒙", "|", "Flutter", "|", "开发"]}
在这里插入图片描述

2.2 在 UI 组件中应用

这是鸿蒙开发者最受用的场景。

Column( children:<Widget>[Text("菜单1"),Text("菜单2"),Text("菜单3"),].intersperse(Divider()).toList(),// 💡 自动在文本间插入分隔线)
在这里插入图片描述

2.3 极致精简:只在中间插入

该库非常聪明,它绝不会在序列的第一个元素之前或最后一个元素之后多塞入一个分隔符,避免了布局溢出的尴尬。


三、常见应用场景

3.1 鸿蒙底部导航或工具栏

当你在构建一排横向排列的图标(Row)时,利用 intersperse(SizedBox(width: 10)) 可以在不编写复杂 margin 逻辑的情况下,快速实现间距自适应。

3.2 动态标签云展示

处理来自后端的关键词列表,通过 intersperse(Text(" · ")) 快速生成带有间隔符的标签流,代码逻辑极其清爽。


四、OpenHarmony 平台适配

4.1 性能与渲染效率

💡 技巧intersperse 采用的是 Dart 的惰性迭代器(Lazy Iterator)。这意味着即使你的鸿蒙列表有几千项,它并不会在内存中瞬间创建出一倍的占位对象,而是在渲染器真正滚动到相应位置时才动态产生。这完美契合了鸿蒙系统对滚动流畅度和低内存损耗的追求。

4.2 适配鸿蒙各种容器

无论是 ColumnRow 还是 ListView,只要涉及到 List<Widget> 的地方,intersperse 都能通过一行代码点亮你的布局逻辑,让你的鸿蒙 UI 代码更加声明式(Declarative)。


五、完整实战示例:鸿蒙精美筛选菜单

本示例演示如何构建一个各选项之间带有装饰点的菜单栏。

import'package:flutter/material.dart';import'package:intersperse/intersperse.dart';classOhosFilterBarextendsStatelessWidget{finalList<String> categories =["全部","鸿蒙版","折叠屏","平板优化"];@overrideWidgetbuild(BuildContext context){returnRow( mainAxisAlignment:MainAxisAlignment.center, children: categories.map((cat){returnText(cat, style:TextStyle(color:Colors.blue));}).intersperse(// 💡 仅在文字之间插入一个小圆点Padding( padding:constEdgeInsets.symmetric(horizontal:8.0), child:Icon(Icons.circle, size:4, color:Colors.grey),)).toList(),);}}voidmain(){runApp(MaterialApp(home:Scaffold(body:Center(child:OhosFilterBar()))));}
在这里插入图片描述

六、总结

intersperse 软件包虽然功能单一,但它是典型的“小而美”工具。它消灭了 UI 代码中那些难以阅读的、充满 if 判断的垃圾循环逻辑。对于每一个注重代码整洁度和 UI 细节的 OpenHarmony 开发者来说,将这种原子化的扩展工具纳入你的工具箱,是你迈向高效开发的微小一步,也是提升代码可维护性的一大步。

Read more

vscode的C/C++插件替换成clangd插件,以及踩的坑

vscode的C/C++插件替换成clangd插件,以及踩的坑

文章目录 * 一、C/C++插件和clangd插件的冲突 * 二、配置步骤 * 安装clangd插件 一、C/C++插件和clangd插件的冲突 (作者是新人,第一次发ZEEKLOG文章,发表的不好勿喷,若有错误希望大家指出)他们之间主要的冲突在于插件的intelliSenseEngine功能,所以,其实可以不必卸载,也不必禁用C/C++插件,只需要在vscode的settings.json加上 "C_Cpp.intelliSenseEngine": "disabled" 这句话就行了,意思就是禁用C/C++扩展自带的 IntelliSense 引擎。 二、配置步骤 安装clangd插件 1. 安装clangd插件,这里有个坑,就是因为安装插件的过程中,其实clangd是从github上下载下来的,但是有时候对github的访问可能访问不到,需要翻墙,所以作者建议自己去github上找,并安装到自己的系统里。

By Ne0inhk

YOLOv3 C++ DLL调用与CUDA依赖配置

YOLOv3 C++ DLL调用与CUDA依赖配置 在工业级视觉系统开发中,目标检测模型的部署稳定性与推理效率至关重要。YOLO(You Only Look Once)系列因其出色的实时性,在安防监控、自动驾驶和智能机器人等领域广泛应用。其中,YOLOv3 作为经典版本,不仅支持多尺度预测以提升小目标检测能力,还具备良好的硬件兼容性,是许多嵌入式视觉项目的首选方案。 然而,将训练好的 YOLOv3 模型集成到生产环境并非简单加载权重文件即可完成。特别是在 Windows 平台下使用 C++ 实现高性能推理时,如何正确封装为动态链接库(DLL),并妥善处理 CUDA 相关依赖,成为开发者常遇到的技术瓶颈。本文将围绕这一主题,从环境搭建、接口设计到部署优化,提供一套完整的实战解决方案。 编译环境搭建与依赖配置 要成功编译基于 Darknet 的 YOLOv3 推理程序,首先必须确保开发环境的完整性。推荐在 Windows 10 x64 系统上使用

By Ne0inhk

常搞混的PLC编程语言ST、STL、SCL到底有啥差别

ST(结构化文本)、SCL(结构化控制语言)、STL(语句表)是工业自动化领域中 PLC(可编程逻辑控制器)常用的编程语言,三者在语法风格、应用场景、执行逻辑上差异显著。以下从定义本质、语法特征、应用场景、核心区别 四个维度详细解析: 一、核心定义与本质 语言全称本质定位所属标准STLStatement List(语句表)汇编级的低级指令语言,基于 PLC 的指令集,逐条执行IEC 61131-3(可选,不同厂商语法差异大)STStructured Text(结构化文本)类 Pascal/C 的高级文本语言,结构化、模块化IEC 61131-3 标准语言SCLStructured Control Language(结构化控制语言)西门子对 ST 的 “定制扩展版”,核心兼容

By Ne0inhk