dartCodeTemplate top-level property

String dartCodeTemplate
final

生成 dart 代码模板

该模板用于通过代码生成器自动生成配置代理类的实现代码。 使用 Mustache 模板语法,支持动态插入类名、字段、方法等内容。 主要功能包括:

  • 自动实现配置接口
  • 生成字段的 getter/setter 及变更通知
  • 生成方法拦截与代理逻辑
  • 支持 ValueNotifier、异步方法等扩展

Implementation

final String dartCodeTemplate = '''
class _{{className}}Impl implements {{className}} {

  /// 配置代理实例,静态成员保证全局唯一
  static final {{configProxy}} _ConfigProxy = {{configProxy}}();

  /// 构造函数
  _{{className}}Impl();

  /// 初始化配置
  Future<void> init() async {
    await _ConfigProxy.init("{{configName}}");
    _read();
  }

  /// 拦截器生成的类级代码片段
  {% for codeBlock in interceptClassCodes %}
  {{ codeBlock.code }}
  {% endfor %}

  /// 字段定义及其 getter/setter
  {% for field in fields %}
  late {{ field.type }}{% if field.typeIsNull %}?{% endif %} _\${{ field.keyName }};

  {{ field.type }}{% if field.typeIsNull %}?{% endif %} get _{{ field.keyName }} => _\${{ field.keyName }};

  set _{{ field.keyName }}({{ field.type }}{% if field.typeIsNull %}?{% endif %} value) {
    if(_\${{ field.keyName }} == value) {
      return;
    }
    _\${{ field.keyName }} = value;
    _updateValue("{{ field.keyName }}",{{ field.type }}, value);
  }
  {% endfor %}

  /// 读取所有配置项的值并通知变更
  void _read() {
    {% for field in fields %}
    _\${{ field.keyName }} = _ConfigProxy.hasValue("{{ field.keyName }}")
        ? _ConfigProxy.getValue("{{ field.keyName }}", {{ field.type }})
        : {{ field.defaultValue }};
    _noticeValueUpdate("{{ field.keyName }}", {{ field.type }}, _\${{ field.keyName }});
    {% endfor %}
  }

  /// 更新配置项的值,并通知监听
  void _updateValue(String key,Type type,Object? value){
    if (value == null) {
      if(_ConfigProxy.hasValue(key)) {
        _ConfigProxy.deleteValue(key);
      }
    } else {
      _ConfigProxy.setValue(key, type, value);
    }
    _noticeValueUpdate(key,type,value);
  }

  /// 通知配置项变更,触发监听器
  void _noticeValueUpdate(String key,Type type,Object? value) {
    {% for update in valueUpdates %}
    if(key == "{{ update.keyName }}") {
      {{ update.valueUpdateListener }}
    }
    {% endfor %}

    {% for listener in otherMethodListeners %}
    {{ listener.code }}
    {% endfor %}
  }

  /// 生成的方法拦截器实现
  {% for method in interceptMethods %}
  {{ method.type }}{% if method.typeIsNull %}?{% endif %} _{{ method.name }}_intercept(
    {% for param in method.methodParams %}
    {{ param.type }}{% if param.typeIsNull %}?{% endif %} {{ param.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
  ) {
    {{ method.methodBody }}
  }
  {% endfor %}

  /// 生成的 set 方法实现
  {% for method in setMethods %}
  @override
  set {{ method.name }}({{ method.type }}{% if method.typeIsNull %}?{% endif %} value) {
    {% if method.isIntercept %}
    _{{ method.keyName }} = _{{ method.interceptName }}_intercept(value);
    {% else %}
    _{{ method.keyName }} = value;
    {% endif %}
  }
  {% endfor %}

  /// 生成的 get 方法实现
  {% for method in getMethods %}
  @override
  {{ method.type }}{% if method.typeIsNull %}?{% endif %} get {{ method.name }} {
    {% if method.isIntercept %}
    return _{{ method.interceptName }}_intercept(_{{ method.keyName }});
    {% else %}
    return _{{ method.keyName }};
    {% endif %}
  }
  {% endfor %}

  /// 生成的其他方法实现
  {% for method in otherMethods %}
  @override
  {{ method.type }}{% if method.typeIsNull %}?{% endif %} {{ method.name }}(
    {% for param in method.methodParams %}
    {{ param.type }}{% if param.typeIsNull %}?{% endif %} {{ param.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
  ) {% if method.isAsync %}async{% endif %} {
    {{ method.methodBody }}
  }
  {% endfor %}

  /// 单例实例
  static final {{className}} _instance = _{{className}}Impl();

}

/// 获取单例实例的方法
{{className}} _\$Get{{className}}() =>  _{{className}}Impl._instance;

/// 扩展方法,用于初始化配置
extension {{className}}Extension on {{className}} {
  Future<void> init{{className}}() async {
    await (this as _{{className}}Impl).init();
  }
}

''';