Flutter for OpenHarmony:recase 字符串大小写转换的魔法师(驼峰、下划线、烤串命名转换) 深度解析与鸿蒙适配指南
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

Flutter for OpenHarmony:recase 字符串大小写转换的魔法师(驼峰、下划线、烤串命名转换) 深度解析与鸿蒙适配指南
前言
在编程世界中,命名规范五花八门:
- JSON 字段通常是
snake_case(user_id) - Dart 变量是
camelCase(userId) - 类名是
PascalCase(UserId) - URL 或 CSS 是
param-case(user-id)
当你需要处理代码生成、动态 JSON 解析或者 UI 展示(如将枚举值转为可读标题)时,手动编写正则来转换这些格式既麻烦又容易出错。
recase 是一个极简的 Dart 库,它能将任意一种命名格式的字符串,一键转换为其他任何格式。
对于 OpenHarmony 开发者,特别是在处理后端接口字段映射,或者编写自动化工具(如生成 ArkUI 代码)时,recase 能节省大量时间。
一、核心功能概览
recase 的 API 极其简单:将字符串包装为 ReCase 对象,然后访问对应属性。
部分支持的格式:
| 属性 | 格式示例 | 场景 |
|---|---|---|
camelCase | myVariableName | Dart 变量/方法 |
pascalCase | MyClassName | Dart 类名 |
snakeCase | my_database_field | JSON/数据库 |
paramCase | my-url-parameter | URL 路径/CSS |
titleCase | My Variable Name | UI 标题展示 |
constantCase | MY_CONSTANT | 常量定义 |
getter
getter
getter
getter
输入: hello_world_test
ReCaseObject
helloWorldTest
HelloWorldTest
Hello World Test
HELLO_WORLD_TEST
二、OpenHarmony 适配说明
recase 是纯字符串处理库,零依赖,零平台限制。
在 OpenHarmony 上即插即用,性能极佳。
三、基础用例
3.1 基础转换
import'package:recase/recase.dart';voidmain(){var input ='Descriptor_For_My_Object';var rc =ReCase(input);print(rc.camelCase);// descriptorForMyObjectprint(rc.snakeCase);// descriptor_for_my_objectprint(rc.pascalCase);// DescriptorForMyObjectprint(rc.paramCase);// descriptor-for-my-objectprint(rc.sentenceCase);// Descriptor for my object}
3.2 UI 友好展示 (Title Case)
在展示枚举值或状态码时,直接显示 Key 对用户不友好。
enumConnectionState{ waiting_for_network, connecting_to_server, connected,}voidshowState(ConnectionState state){// 原始值:ConnectionState.waiting_for_networkString key = state.toString().split('.').last;// 转换后:Waiting For Networkprint(ReCase(key).titleCase);}
四、完整实战示例:动态 JSON 键值归一化
在鸿蒙开发中,如果后台接口返回的 JSON 风格不统一(有的用下划线,有的用驼峰),我们可以用 recase 写一个拦截器,将所有 Key 统一转换为 Dart 友好的 camelCase。
import'package:recase/recase.dart';/// 递归将 Map 的 Key 转换为驼峰命名dynamicnormalizeKeys(dynamic data){if(data isMap){var newMap ={}; data.forEach((key, value){if(key isString){// 关键点:统一转为 camelCaseString newKey =ReCase(key).camelCase; newMap[newKey]=normalizeKeys(value);}else{ newMap[key]=normalizeKeys(value);}});return newMap;}elseif(data isList){return data.map((e)=>normalizeKeys(e)).toList();}return data;}voidmain(){// 模拟糟糕的后端返回数据:风格混杂var rawJson ={"user_id":1001,"USER_NAME":"zhangsan","is-active":true,"address_info":{"city_name":"Shenzhen","POSTAL-CODE":"518000"},"order_list":[{"ORDER_ID":"A001","total-price":99.9}]};print('=== 处理前 ===');print(rawJson);var cleanData =normalizeKeys(rawJson);print('\n=== 处理后 (Dart Friendly) ===');print(cleanData);// 输出结果:// {// userId: 1001, // userName: zhangsan, // isActive: true, // addressInfo: {// cityName: Shenzhen, // postalCode: 518000// }, // orderList: [// {orderId: A001, totalPrice: 99.9}// ]// }}
五、总结
recase 是一个小而美的工具库。
它解决的问题很单一,但做得足够好。在 OpenHarmony 开发中,只要涉及到跨系统数据交换(如与后端 JSON 交互、与 ArkTS 模块通信命名对齐),recase 都能成为你手中那个不起眼但不可或缺的转换器。