登录社区云,与社区用户共同成长
邀请您加入社区
本文详解在OpenHarmony上适配Kotlin Multiplatform图片加载库Landscapist的完整方案,基于ArkTS实现其核心特性:Painter抽象、状态机(Loading/Success/Error)与可插拔变换管线(如缩放、居中裁剪)。通过三层架构设计——语义层定义契约、引擎层桥接@ohos.net.http与@ohos.multimedia.image系统能力、验收页演
本文是「OpenHarmony 鸿蒙化三方库适配」延续「纯逻辑等价复刻」路线——在已交付 Decompose(组件化导航)、Essenty(生命周期/状态保持)、MVIKotlin(单向数据流)、Reaktive(响应式原语)之后,补齐「依赖注入」这一层:evant 开源的。它用编译期代码生成把@Inject@Component@Module@Provides@Singleton@Named翻译成
把 SQLDelight 跑上鸿蒙,本质是打通这条链。关键不在某一步多难,而在于每一步都有"看起来对但其实不对"的细节:cinterop 的 linkerOpts 不进最终链接、Scrt1.o 残留 main 符号、opaque config 在模拟器上的内部校验、沙箱路径不能硬编码。这次全绿,证明整条链路真实可用。.sq文件集成(现在 SQL 是硬编码字符串,没走 SQLDelight 编译器生
本文详细记录了 expo-system-ui 在鸿蒙(RNOH)平台的适配过程,涵盖版本对齐、源码同步、TurboModule 实现及自动链接配置。重点实现 setBackgroundColorAsync 与 getBackgroundColorAsync 两个方法,通过 Preferences 持久化窗口背景色,达成与原生视图融合效果。适配中发现关键缺陷:颜色字节序转换方向错误,导致屏幕显示与输
本文介绍了为 system_settings_2 3.0.2 版本适配 OpenHarmony 的完整流程。该库原生支持 Android/iOS,但无鸿蒙实现。适配核心在于通过 startAbility + Want 跳转系统设置页,利用 uri 定位子页面,同时因 uri 非公开接口,必须实现兜底逻辑(失败则跳转首页)。适配遵循六步流程:建仓、克隆、创建鸿蒙目录、编写插件实现、补充文档与示例、发
库版本:jordond/connectivity 2.2.1 鸿蒙切片|验证环境:HarmonyOS Kotlin 2.2.21-1.0.0|Gradle 8.14.1|JDK 21|DevEco Studio 26.0.0|HarmonyOS 7.0.0(API 26)|模拟器(x86_64)前两篇 KMP 适配分别验证了两件事。证明 ohos target 能跑纯计算:actual 不链系统
库版本:multiplatform-settings 1.3.0 鸿蒙 fork|验证环境:HarmonyOS Kotlin 2.2.21-1.0.0|Gradle 8.14.1|JDK 21|DevEco Studio 26.0.0.821|HarmonyOS 7.0.0(API 26)|模拟器(x86_64)验证的是纯计算:actual 不链任何系统 so,自己光栅、自己编 PNG。这篇换一类
pedometer 4.2.0 在鸿蒙上因缺少原生实现导致“行走中”状态无法更新。通过同步上游仓库、添加 ohos 平台骨架,编写 ArkTS 插件实现并清理冗余文件,补全权限与适配文档,最终完成事件通道对接。关键点:严格遵循 Dart 层 int 类型契约,确保状态仅限 0/1,避免断言崩溃。推送后支持鸿蒙平台步数流与行走状态判断。
本次适配真正需要处理的不是一个OpenHarmony 图库→ ArkTS 选图与 PixelMap 生命周期→ Core Vision Kit 端侧识别→ ArkUI 结果渲染→ KMP 结果模型与置信度过滤→ JSON→ JVM / Native / 真机共用同一套规则。
本文以“传感器仪表盘+屏幕方向响应”为例,详解如何在鸿蒙Flutter中安全使用dchs_motion_sensors库。涵盖订阅管理、数据绑定、权限处理、采样频率设置及界面更新等关键点,强调setState必要性、onError不可省略、订阅需成套取消,并提供完整示例工程链接,助开发者避免常见坑点,实现稳定高效的传感器数据读取与展示。
回顾一下:在中以 git TAG 引入 hash_password,通过类的三个方法(input_hash→→)手动完成密码哈希,或用组件包裹输入框实现实时哈希。核心逻辑全部是纯 Dart 实现,通过crypto包完成 SHA 运算,不经过插件自定义通道。零权限、纯 Dart、三端一致,已在 OpenHarmony 6.1.1.120 真机(API 24 / arm64)完整实测。总结对比方法功能
回顾一下:在中以 git TAG 引入 ui_paste_component,在中声明权限(配置reason和usedScene),在 Dart 层使用嵌入原生粘贴按钮。用户点击按钮后,插件自动请求权限、读取系统剪贴板、通过 MethodChannel 将文本回传给 Dart 层。Dart 层零改动,通道契约与 iOS/Android 完全一致。已在 OpenHarmony 6.1.1.120 真
RK3568开源鸿蒙显示:同一时刻只允许一路主屏。真屏只亮背光、桌面跑到HDMI,常因设备树多路显示同时okay,simple-panel永远上报connected抢占主显示。需成组开关panel、控制器、入口、路由,保持一路okay。改显示要刷p4 resource,路径用/dev/block/,并用/proc/device-tree与dri/0/summary验证。
串口日志能定位启动断点:DDR训练失败换MiniLoader,找不到boot_linux刷eMMC,16秒panic查fstab与ramdisk,58秒重启查vendor,黑屏是SuspendController超时。启动是串行管道,每阶段对应特定分区,按死亡时间对症刷镜像,勿盲目改驱动。
本项目通过一个习题练习与答题卡系统的实现,展示了 Flutter 开发中多个核心技术的综合应用:首先是组件化设计思想。项目将复杂的功能拆分为习题练习和答题卡两个独立组件,每个组件职责单一、接口清晰,既提高了代码的可维护性,也方便了后续的复用和扩展。其次是状态管理的经典实践。项目遵循状态提升原则,将共享状态提升到父组件管理,子组件通过回调与父组件通信。这种基于 setState 的状态管理方式虽然简
本项目通过实现侧滑删除与批量操作列表,展示了 Flutter 中列表交互开发的多个高级技巧:首先是组件的泛型化设计。通过泛型参数,组件可以适配任意业务数据类型,大大提高了复用性。这是 Flutter 中设计可复用组件的重要方法。其次是 Dismissible 组件的深入应用。项目不仅实现了基本的侧滑删除,还通过 confirmDismiss 回调的巧妙使用,实现了自定义删除确认逻辑和与外部数据的协
本项目通过自定义实现列表项滑动交互动效,深入展示了 Flutter 手势系统和动画系统的核心原理:首先是自定义手势交互的实现。项目使用 GestureDetector 监听水平拖动手势,实时更新偏移量,并在手势结束时自动判断展开或收起。这种对手势的精细控制是构建自定义交互组件的基础。其次是 Flutter 动画系统的应用。项目使用 AnimationController + Tween + Cur
本项目通过实现搜索与实时过滤列表功能,展示了 Flutter 开发中多个实用的技术技巧:首先是防抖机制的实现与应用。防抖是优化搜索性能的常用手段,通过 Timer 实现的防抖逻辑简洁高效,是 Flutter 开发中必须掌握的技巧之一。其次是搜索高亮的实现。使用 RichText 和 TextSpan 实现关键词高亮,虽然代码稍显繁琐,但效果直观,是搜索类功能的标配。掌握 TextSpan 的使用对
本项目实现了单值滑块和范围滑块两个可复用组件,深入展示了 Flutter 组件封装的核心技术和最佳实践。在组件设计方面,两个滑块组件都采用了一致的设计模式:外部传入配置参数,内部维护交互状态,通过回调通知数值变化。这种设计使得组件既具有良好的封装性,又保持了足够的灵活性。组件参数设计合理,提供了常用的配置选项(最小值、最大值、初始值、标签、回调),满足大多数使用场景的需求。
本项目通过 NestedScrollView 与 SliverAppBar 的组合,实现了一个具有可折叠头部效果的滚动页面。虽然代码量不大,但涉及到 Flutter 中比较高级的滚动机制,是理解 Flutter Sliver 体系的绝佳入门示例。从技术实现来看,项目展示了 Flutter Sliver 体系的强大能力。Sliver 是 Flutter 滚动系统的基石,理解 Sliver 的工作原理
本项目实现了一个功能完整、设计精美的颜色选择器组件,涵盖了颜色展示、颜色选择、颜色代码显示等核心功能。项目虽然结构简单,但涉及到了 Flutter 开发中的多个重要知识点,包括颜色处理、网格布局、状态管理、手势检测等。从技术实现来看,项目充分展示了 Flutter 声明式 UI 的优势。所有的视觉表现都由状态驱动,代码逻辑清晰直观。开发者只需要关注状态的定义和状态变化的时机,不需要手动操作 UI
随机数生成器组件继承自有状态组件,定义了三个可配置属性:最小值、最大值和生成回调。最小值和最大值定义了随机数的生成范围,默认值分别为 0 和 100。生成回调是一个可选的整型回调函数,当随机数生成完成时被调用,将生成的数值传递给父组件。这种参数化的设计使得组件具有高度的灵活性,可以通过配置不同的参数来适应各种不同的使用场景。组件自身不关心生成的数字用于什么目的,只负责生成数字并通知外部,遵循了单一
抛硬币组件继承自有状态组件,定义了一个可选的回调属性 onFlip,类型为接收字符串参数的函数。当硬币翻转完成、结果确定后,该回调函数被调用,将结果(正面或反面)传递给父组件。这种设计使得组件具有良好的封装性,外部只需监听回调即可获取结果,不需要关心内部的动画实现和状态管理。本项目实现了一个精美的抛硬币模拟器,虽然功能不算复杂,但在动画实现和视觉效果方面有许多值得深入学习的技术点。3D 变换与 M
测速组件继承自有状态组件,定义了一个可选的回调属性 onTestComplete,类型为接收字符串和双精度浮点数两个参数的函数。当测速完成后,该回调函数被调用,第一个参数传递状态(完成或失败),第二个参数传递平均速度。这种双参数的回调设计可以一次性传递多个信息,避免了需要多次回调的麻烦。父组件可以根据状态和速度来决定后续的展示和处理逻辑。本项目实现了一个功能完整、界面精美的网络测速工具模拟应用。虽
简洁高效的去重算法:利用 Dart 内置的 Set 数据结构实现去重,代码简洁,性能高效。充分利用了语言的内置能力,避免了手动实现去重逻辑的复杂性。清晰的界面布局:界面分为输入、操作、输出和说明四个区域,结构清晰,操作流程符合用户直觉。输入区和输出区采用对称设计,视觉上平衡美观。完善的用户反馈:通过 SnackBar 机制提供即时的操作反馈,用户可以清楚地知道每次操作的结果。空输入、成功去重、空复
清晰的映射表设计:使用两个 Map 存储中英文标点的对应关系,结构清晰,易于理解和扩展。映射表的设计使得转换逻辑与数据分离,新增或修改标点对只需调整映射表,不需要改动转换算法。通用转换方法:将转换逻辑抽象为通用方法,通过传入不同的映射表实现双向转换,代码复用性高。这种设计遵循了 DRY(Don’t Repeat Yourself)原则,避免了重复代码。良好的交互设计:两个转换按钮使用不同颜色区分,
第一,多种渐变创建方式。支持预设模板、自定义颜色、随机生成三种方式创建渐变色,满足不同用户的需求。第二,实时预览效果。所有调整都能立即在预览区域看到效果,所见即所得。第三,渐变方向控制。提供多种渐变方向选择,让用户可以调整渐变的角度。第四,随机生成功能。点击预览区即可生成随机渐变,既有趣味性又能激发灵感。第五,扩展方法的应用。使用 Dart 扩展方法为 Alignment 添加 flip 方法,代
本项目是一个设计精美的阅读进度悬浮球组件演示应用,虽然功能相对单一,但在交互设计和组件封装方面有很多值得学习的地方。在交互设计方面,悬浮球支持自由拖动和边界限制,点击展开详情面板的设计符合用户对悬浮按钮的常见认知。拖动时的实时位置更新和边界约束,保证了良好的用户体验。在组件设计方面,组件采用参数化设计,将颜色、尺寸、初始值等属性通过构造函数暴露给外部,提高了组件的复用性和灵活性。内部状态自包含,外
本项目是一个功能完整、界面精美的油耗计算器应用,虽然功能相对简单,但涵盖了 Flutter 开发中的多个基础知识点,非常适合初学者学习和参考。在输入处理方面,项目使用 TextEditingController 管理输入框,设置数字键盘类型,使用 tryParse 进行安全的类型转换,体现了对用户输入的严谨处理态度。在计算逻辑方面,油耗计算公式准确,防御式编程到位,对空输入、零值等边界情况都做了妥
本项目是一个设计精美、功能完整的数字时钟应用,虽然规模不大,但在技术实现上有不少亮点和值得学习的地方。在动画技术方面,项目创新性地使用 AnimationController 驱动时间更新,而非常规的 Timer 方式。这种方式与 Flutter 的绘制机制深度集成,为后续添加过渡动画效果预留了扩展空间。状态监听实现的循环机制也展示了对动画控制器的深入理解。在时间处理方面,项目展示了 DateTi
本项目是一个功能完整、界面精美的电子节拍器应用,实现了节拍器的核心功能,包括多种速度选择、多种拍号支持、脉冲动画效果和主题切换。项目在动画实现和定时控制方面有不少值得学习的技术细节。在动画技术方面,项目巧妙地结合了 Timer 和 AnimationController,用 Timer 控制节拍的时间间隔,用 AnimationController 实现每拍的脉冲视觉效果。
放大镜组件是一个有状态组件,定义了三个可选参数:图片地址、放大倍数和放大镜半径。这些参数都提供了合理的默认值,使用户可以在不传任何参数的情况下直接使用组件。图片地址默认指向 picsum.photos 的随机图片服务,尺寸为 800x600 像素放大倍数默认为 2.0 倍,即放大镜中的图像是原图的两倍大小放大镜半径默认为 100.0 逻辑像素,即放大镜直径为 200 像素这些参数被声明为final
沉浸式全屏设计:整个应用以全屏图片为核心,消除了所有不必要的界面元素,为用户提供了沉浸式的视觉体验。平滑的淡入淡出过渡:使用 Flutter 动画系统实现了专业级的图片切换效果,过渡流畅自然,视觉效果出色。丰富的交互控制:提供了播放/暂停、上一张/下一张、指示器跳转、遮罩切换等多种控制方式,用户可以完全掌控播放过程。灵活的子组件插槽:通过 child 参数支持在背景之上叠加任意内容,使组件可以作为
巧妙的切割算法:利用ClipRectFittedBox和的组合实现图片的视觉切割,不需要对图片进行实际的像素操作,性能高效,实现简洁。网格线可视化:提供网格线显示/隐藏功能,用户可以直观地看到切割位置,也可以隐藏网格线查看纯净的切割效果,灵活实用。多图片切换:内置多张不同的图片供用户切换体验,让用户可以用不同的图片来感受九宫格切割的效果。主题适配完善:所有视觉元素都支持明暗主题切换,包括背景、文字
精致的模糊揭示动画:使用和双动画协同实现了专业级的盲盒揭开效果,模糊度和透明度同步变化,视觉过渡流畅自然。多状态反馈设计:为不同的状态提供了相应的视觉反馈——未揭开时显示点击提示,揭开过程中显示加载指示器,揭开完成后显示清晰图片,用户体验完整连贯。网格布局集成:以网格形式展示多个盲盒,每个盲盒状态独立,用户可以逐个探索,营造出收集和探索的乐趣。可复用组件设计:盲盒图片封装为独立组件,提供丰富的配置
图片取色器组件继承自 StatefulWidget,这是因为它需要维护多个可变状态:图片是否加载完成、选中的颜色、HEX 代码、RGB 代码、点击位置等。组件的构造函数接收两个可选参数:宽度和高度。宽度默认值为 double.infinity,表示占满父容器的可用宽度;高度默认值为 400.0 像素。这种设计使得组件具有良好的灵活性,可以根据不同的使用场景调整尺寸。组件化设计:图片取色器被封装为独
逼真的 3D 透视效果:通过三角函数和 Matrix4 矩阵变换,在纯 2D 框架上实现了令人惊艳的 3D 透视效果,图片的大小、位置和透明度都符合真实的透视规律。流畅的手势交互:支持拖动旋转,用户可以用手指或鼠标自由控制轮播的角度,交互直观自然,响应实时流畅。丰富的可配置参数:提供了尺寸、半径、透视强度等多个可调参数,用户可以根据需要灵活调整轮播效果。精巧的算法设计:用简洁的数学计算实现了复杂的
基础配置:验证码长度、完成回调、变化回调、文本样式颜色配置:激活颜色、未激活颜色、选中颜色、错误颜色尺寸配置:输入框宽度、高度、圆角大小错误配置:是否显示错误、错误提示文本安全配置:是否密文显示重发配置:重发回调、倒计时秒数(默认60秒)完整的验证流程:涵盖了验证码输入、加载状态、成功/失败反馈、重新发送、倒计时等完整的 OTP 验证流程,功能完善。倒计时机制:使用递归 Future.delaye
组件化封装思想:项目将彩纸动画的复杂实现封装为独立的可复用组件,对外提供简洁的配置接口,体现了良好的软件工程思想。使用者无需了解底层的粒子物理模拟和绘制细节,只需传入几个简单参数即可使用。组件支持外部控制器和内部控制器两种模式,适应不同的使用场景。生命周期精细化管理:组件对控制器的创建和销毁进行了精细化管理,区分了内部创建和外部传入两种情况,避免资源泄漏和重复释放问题,展现了对 Flutter 组
条形码组件是本项目最核心的技术实现,它完全自主地完成了从数据编码到图形绘制的全过程。组件属性设计组件接收丰富的配置参数,包括:数据字符串、条码格式枚举、宽度、高度、背景色、前景色、点击回调。这些参数覆盖了条形码展示的主要定制需求,使用者可以根据业务场景灵活调整。数据和格式是必填参数,因为它们决定了条形码的内容。尺寸和颜色参数都提供了合理的默认值,降低了使用门槛。点击回调是可选参数,使得组件既可作为
按钮组组件是本项目的核心实现,提供了完整的按钮组功能。组件属性设计buttons:按钮标签列表,决定按钮的数量和显示文本selectedIndex:初始选中索引,支持外部控制选中状态onSelected:选中回调函数,点击按钮时触发width/height:按钮尺寸,控制每个按钮的大小backgroundColor/selectedColor:按钮背景色和选中色textColor/selected
本项目是一个结构清晰、功能完整的 Flutter 动画切换开关组件演示应用,展示了如何集成和使用第三方 UI 组件库,并将其封装为符合 Flutter 设计规范的可复用自定义组件。技术亮点体现在以下几个方面:第一是第三方库的集成与封装。将 animated_toggle_switch 库的复杂配置封装在组件内部,对外暴露简洁的属性接口,提高了代码的可读性和可维护性。上层使用者只需要提供初始值和变化
本项目实现了一个功能完整、设计合理的数据表格组件,代码结构清晰,易于理解和扩展,是 Flutter 自定义复杂组件的优秀学习案例。技术亮点体现在以下几个方面:第一是纯原生实现。不依赖任何第三方表格库,完全使用 Flutter 基础组件构建,代码量适中,逻辑清晰。开发者可以完全掌控每一个细节,也便于根据具体业务需求进行定制化修改。第二是灵活的列配置。每一列都可以独立设置宽度和对齐方式,满足不同类型数
本项目实现了功能完整的复选框组件,包括单个复选框和复选框组两种形式,代码结构清晰,设计规范,是 Flutter 表单组件开发的优秀参考案例。技术亮点体现在以下几个方面:第一是受控组件模式的实现。两个组件都采用了内部状态与外部属性同步的受控组件模式,既保证了交互的即时反馈,又允许父组件完全控制组件状态。这是 Flutter 表单组件的标准设计模式,也是很多初级开发者容易理解不透彻的地方。第二是组件组
React Native 做,推荐不要自己封装 Native 权限,而是统一使用:它统一封装 iOS / Android 权限申请、检查、跳转设置等流程。
龙魂·鸿蒙插件全家桶v2.0摘要 一套专为OpenHarmony设计的Flutter插件集合,包含核心通信桥接(含主权锚定/DNA追溯/三色审计)、系统能力(传感器/蓝牙/定位)、跨设备协同(分布式/文件传输)、构建工具链及定制UI组件(主权印章/三色徽章等)。所有模块采用分层架构设计,通过Dart-ETS双向通信实现,配套完整异常处理与数据验证机制,每个文件均标注功能定位,确保代码可读性与可维护
JSI = React Native 中连接 JS Runtime 和 C++ Native 世界的一层 C++ 接口。它通过让 JS 持有 C++ 对象引用,实现同步调用、零 JSON 序列化、高性能 Native 交互,是 TurboModules 和 Fabric 的底层基础。如果继续深入,可以研究JSI 源码结构(jsi.h)、Hermes Runtime、HostObject 生命周期、
React Native 在 0.76(2024 年底)把新架构设为默认,0.82(2025 年 10 月),到 2026 年新项目已经没有“要不要开新架构”的选项——只能用新的。所以讨论 RN,本质上就是在讨论新架构下的 RN。下面先把新旧架构拆清楚,再回答“新项目还推不推荐”。
在 OHPM(OpenHarmony Package Manager)生态中,三方库的版本号严格遵循规范。这套规范旨在通过版本号直观地传达代码的变更类型与兼容性。
项目中文字大小、颜色、圆角、间距、按钮尺寸、阴影等样式值分散写在各个页面,出现多处硬编码 #007DFF、fontSize (18)、padding (12),后期产品统一换肤、调整主色调需要全局逐行修改,维护成本极高。封装全局主题常量 ThemeUtil,统一管理主色 / 辅助色 / 文字色、间距、圆角、字体大小、通用阴影,支持一键切换深色 / 浅色两套主题,所有页面、组件统一引用主题变量,一键