Flutter框架跨平台鸿蒙开发——Extension扩展方法

一、Extension概述

Extension允许在不修改原始类的情况下为其添加新功能。
不能修改
扩展
新增
获得
原始类
添加方法
Extension
使用Extension

|| 特性 | 说明 |

|------|------|

| 不修改源码 | 无需访问原始类定义 |

| 静态解析 | 编译时确定调用 |

| 可链式调用 | 支持流畅API设计 |

| 支持泛型 | 可用于泛型类型 |

二、示例代码

定义Extension
选择目标类型
添加扩展方法
直接调用新方法

dart 复制代码
class _Page02ExtensionDemo extends StatefulWidget {
  const _Page02ExtensionDemo();

  @override
  State<_Page02ExtensionDemo> createState() => _Page02ExtensionDemoState();
}

class _Page02ExtensionDemoState extends State<_Page02ExtensionDemo> {
  String _inputText = 'hello world';

  void _transformText() {
    setState(() {
      _inputText = _inputText.capitalizeFirst();
    });
  }

  void _reverseText() {
    setState(() {
      _inputText = _inputText.reverseString();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.pink.shade50,
      padding: const EdgeInsets.all(20),
      child: Column(
        children: [
          Container(
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.pink.shade600,
              borderRadius: BorderRadius.circular(20),
            ),
            child: const Column(
              children: [
                Icon(Icons.extension, size: 48, color: Colors.white),
                SizedBox(height: 16),
                Text(
                  'Extension扩展',
                  style: TextStyle(fontSize: 28, fontWeight: FontWeight.bold, color: Colors.white),
                ),
                SizedBox(height: 8),
                Text('扩展字符串功能 - 页面 2/5', style: TextStyle(color: Colors.white70)),
              ],
            ),
          ),
          const SizedBox(height: 24),
          Expanded(
            child: Container(
              padding: const EdgeInsets.all(20),
              decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(20)),
              child: Column(
                children: [
                  Text(
                    _inputText,
                    style: const TextStyle(fontSize: 28, fontWeight: FontWeight.bold),
                  ),
                  const SizedBox(height: 20),
                  Row(
                    children: [
                      Expanded(
                        child: ElevatedButton(
                          onPressed: _transformText,
                          style: ElevatedButton.styleFrom(backgroundColor: Colors.pink.shade600),
                          child: const Text('首字母大写', style: TextStyle(color: Colors.white)),
                        ),
                      ),
                      const SizedBox(width: 10),
                      Expanded(
                        child: ElevatedButton(
                          onPressed: _reverseText,
                          style: ElevatedButton.styleFrom(backgroundColor: Colors.pink.shade600),
                          child: const Text('反转字符串', style: TextStyle(color: Colors.white)),
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

extension StringExtension on String {
  String capitalizeFirst() {
    if (isEmpty) return this;
    return this[0].toUpperCase() + substring(1);
  }

  String reverseString() {
    return split('').reversed.join('');
  }
}

三、工作流程

字符串 Extension 界面 用户 字符串 Extension 界面 用户 点击转换按钮 调用capitalizeFirst() 处理字符串 返回结果 返回新字符串 更新显示 显示结果

四、应用场景

场景 示例
字符串处理 格式化、验证
数字扩展 货币格式、进度百分比
Widget扩展 通用样式方法
集合操作 分组、过滤快捷方法

五、最佳实践

  • ✅ 命名清晰表达用途
  • ✅ 单一职责原则
  • ✅ 提供文档注释
  • ❌ 避免过度使用

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

相关推荐
limuyang24 小时前
PDF Viewer KMP(基于 chrome 的 PDFium 内核)
android·kotlin
ℋᙚᵐⁱᒻᵉ鲸落5 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙6 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
Flutter OH7 小时前
Flutter OH 外接纹理问题定位指南
flutter
এ慕ོ冬℘゜7 小时前
navigator 导航对象 BOM制作方法
javascript
心平气和量大福大8 小时前
android-控件-搜索框SearchView
android·gitee
2601_962177138 小时前
【MySQL篇】聚合查询,联合查询
android·java·mysql
壮哥_icon8 小时前
【Android】批量 VectorDrawable 动态分别修改 fillColor 和 strokeColor 的踩坑与终极解决方案
android
齐天qaq9 小时前
Android 系统 APK 分区与权限
android