Flutter for OpenHarmony:recase 字符串大小写转换的魔法师(驼峰、下划线、烤串命名转换) 深度解析与鸿蒙适配指南
recase是一个简洁高效的Dart库,专为解决编程中各种命名格式转换问题而设计。它支持将任意格式的字符串一键转换为camelCase、PascalCase、snake_case等常见格式,特别适合OpenHarmony开发者在处理JSON解析、代码生成和UI展示等场景时使用。该库零依赖、跨平台,性能优异,能显著提升开发效率。通过实战示例展示了如何用recase统一处理混合风格的JSON键值,使其
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.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 |
常量定义 |
二、OpenHarmony 适配说明
recase 是纯字符串处理库,零依赖,零平台限制。
在 OpenHarmony 上即插即用,性能极佳。
三、基础用例
3.1 基础转换
import 'package:recase/recase.dart';
void main() {
var input = 'Descriptor_For_My_Object';
var rc = ReCase(input);
print(rc.camelCase); // descriptorForMyObject
print(rc.snakeCase); // descriptor_for_my_object
print(rc.pascalCase); // DescriptorForMyObject
print(rc.paramCase); // descriptor-for-my-object
print(rc.sentenceCase); // Descriptor for my object
}

3.2 UI 友好展示 (Title Case)
在展示枚举值或状态码时,直接显示 Key 对用户不友好。
enum ConnectionState {
waiting_for_network,
connecting_to_server,
connected,
}
void showState(ConnectionState state) {
// 原始值:ConnectionState.waiting_for_network
String key = state.toString().split('.').last;
// 转换后:Waiting For Network
print(ReCase(key).titleCase);
}

四、完整实战示例:动态 JSON 键值归一化
在鸿蒙开发中,如果后台接口返回的 JSON 风格不统一(有的用下划线,有的用驼峰),我们可以用 recase 写一个拦截器,将所有 Key 统一转换为 Dart 友好的 camelCase。
import 'package:recase/recase.dart';
/// 递归将 Map 的 Key 转换为驼峰命名
dynamic normalizeKeys(dynamic data) {
if (data is Map) {
var newMap = {};
data.forEach((key, value) {
if (key is String) {
// 关键点:统一转为 camelCase
String newKey = ReCase(key).camelCase;
newMap[newKey] = normalizeKeys(value);
} else {
newMap[key] = normalizeKeys(value);
}
});
return newMap;
} else if (data is List) {
return data.map((e) => normalizeKeys(e)).toList();
}
return data;
}
void main() {
// 模拟糟糕的后端返回数据:风格混杂
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 都能成为你手中那个不起眼但不可或缺的转换器。
更多推荐

所有评论(0)