欢迎加入开源鸿蒙跨平台社区: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 常量定义

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';

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 都能成为你手中那个不起眼但不可或缺的转换器。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐