使用方法

1.使用 @globalConfig 注解,从pubspec.yaml里生成一个静态dart文件

@globalConfig
class AnyClass{}

2.如果你想修改一些文件,你可以继承GlobalFileModifier类后添加functions,他是个FunctionBean列表:

  • FunctionBean.path:要修改的文件
  • FunctionBean.func:修改 源数据(参数source) 的函数,可在此函数中返回最终的内容,若发现参数source中不需修改,返回null放弃修改
@globalConfig
class AnyClass extends GlobalFileModifier {
  @override
  List<FunctionBean> functions = [
    FunctionBean(
      path: "android/app/build.gradle.kts",
      func: (String source){
        return "$source";
      },
    ),
  ];
}
  • 目前默认方法
//根据yaml文件修改包名,app名和签名
@globalConfig
class Config extends GlobalFileModifier {
  @override
  List<FunctionBean> functions = [
    changeAndroidAppName(),
    changeIosAppName(),
    changeAndroidPackageName(),
    changeIosPackageName(),
    changeAndroidSignType(),
  ];
}


3.执行代码生成

flutter pub run build_runner clean
flutter pub run build_runner build --delete-conflicting-outputs

4.生成的文件config.gen.dart大概是

// GENERATED CODE - DO NOT MODIFY BY HAND

// **************************************************************************
// GlobalConfigGenerator
// **************************************************************************

// Generate at:2025-07-23T11:42:14.957633
class YamlEntity {
  final String name;
  final String description;
  final String publish_to;
  final String version;
  final String app_name;
  final String package_name;
  final String android_sign;
  final String base_url;
  final Environment environment;
  final Fluwx fluwx;
  final Dependencies dependencies;
  final Dev_dependencies dev_dependencies;
  final Flutter flutter;

  const YamlEntity(
      {required this.name,
        required this.description,
        required this.publish_to,
        required this.version,
        required this.app_name,
        required this.package_name,
        required this.android_sign,
        required this.base_url,
        required this.environment,
        required this.fluwx,
        required this.dependencies,
        required this.dev_dependencies,
        required this.flutter});

  factory YamlEntity.fromJson(Map<String, dynamic> json) {
    return YamlEntity(
      name: json['name'],
      description: json['description'],
      publish_to: json['publish_to'],
      version: json['version'],
      app_name: json['app_name'],
      package_name: json['package_name'],
      android_sign: json['android_sign'],
      base_url: json['base_url'],
      environment: Environment.fromJson(
          Map<String, dynamic>.from(json['environment'] ?? const {})),
      fluwx:
      Fluwx.fromJson(Map<String, dynamic>.from(json['fluwx'] ?? const {})),
      dependencies: Dependencies.fromJson(
          Map<String, dynamic>.from(json['dependencies'] ?? const {})),
      dev_dependencies: Dev_dependencies.fromJson(
          Map<String, dynamic>.from(json['dev_dependencies'] ?? const {})),
      flutter: Flutter.fromJson(
          Map<String, dynamic>.from(json['flutter'] ?? const {})),
    );
  }
}

class Environment {
  final String sdk;

  const Environment({required this.sdk});

  factory Environment.fromJson(Map<String, dynamic> json) {
    return Environment(
      sdk: json['sdk'],
    );
  }
}

class Fluwx {
  final String app_id;
  final bool debug_logging;

  const Fluwx({required this.app_id, required this.debug_logging});

  factory Fluwx.fromJson(Map<String, dynamic> json) {
    return Fluwx(
      app_id: json['app_id'],
      debug_logging: json['debug_logging'],
    );
  }
}

class Dependencies {
  final DependenciesFlutter flutter;
  final String get;
  final String path_provider;
  final String flutter_easyloading;
  final String intl;
  final String event_bus;
  final DependenciesImage_gallery_saver image_gallery_saver;
  final String image_picker;
  final String flutter_colorpicker;
  final String share_plus;
  final String archive;
  final String image;
  final String reorderables;
  final String isar;
  final String shared_preferences;
  final String path;
  final String yaml;
  final String source_gen;
  final String analyzer;
  final String build;
  final String meta;
  final DependenciesIsar_flutter_libs isar_flutter_libs;
  final String webview_flutter;
  final String video_player;
  final String fluwx;
  final String json_annotation;
  final DependenciesGen_global_config gen_global_config;
  final String dio;

  const Dependencies(
      {required this.flutter,
        required this.get,
        required this.path_provider,
        required this.flutter_easyloading,
        required this.intl,
        required this.event_bus,
        required this.image_gallery_saver,
        required this.image_picker,
        required this.flutter_colorpicker,
        required this.share_plus,
        required this.archive,
        required this.image,
        required this.reorderables,
        required this.isar,
        required this.shared_preferences,
        required this.path,
        required this.yaml,
        required this.source_gen,
        required this.analyzer,
        required this.build,
        required this.meta,
        required this.isar_flutter_libs,
        required this.webview_flutter,
        required this.video_player,
        required this.fluwx,
        required this.json_annotation,
        required this.gen_global_config,
        required this.dio});

  factory Dependencies.fromJson(Map<String, dynamic> json) {
    return Dependencies(
      flutter: DependenciesFlutter.fromJson(
          Map<String, dynamic>.from(json['flutter'] ?? const {})),
      get: json['get'],
      path_provider: json['path_provider'],
      flutter_easyloading: json['flutter_easyloading'],
      intl: json['intl'],
      event_bus: json['event_bus'],
      image_gallery_saver: DependenciesImage_gallery_saver.fromJson(
          Map<String, dynamic>.from(json['image_gallery_saver'] ?? const {})),
      image_picker: json['image_picker'],
      flutter_colorpicker: json['flutter_colorpicker'],
      share_plus: json['share_plus'],
      archive: json['archive'],
      image: json['image'],
      reorderables: json['reorderables'],
      isar: json['isar'],
      shared_preferences: json['shared_preferences'],
      path: json['path'],
      yaml: json['yaml'],
      source_gen: json['source_gen'],
      analyzer: json['analyzer'],
      build: json['build'],
      meta: json['meta'],
      isar_flutter_libs: DependenciesIsar_flutter_libs.fromJson(
          Map<String, dynamic>.from(json['isar_flutter_libs'] ?? const {})),
      webview_flutter: json['webview_flutter'],
      video_player: json['video_player'],
      fluwx: json['fluwx'],
      json_annotation: json['json_annotation'],
      gen_global_config: DependenciesGen_global_config.fromJson(
          Map<String, dynamic>.from(json['gen_global_config'] ?? const {})),
      dio: json['dio'],
    );
  }
}

class DependenciesFlutter {
  final String sdk;

  const DependenciesFlutter({required this.sdk});

  factory DependenciesFlutter.fromJson(Map<String, dynamic> json) {
    return DependenciesFlutter(
      sdk: json['sdk'],
    );
  }
}

class DependenciesImage_gallery_saver {
  final String path;

  const DependenciesImage_gallery_saver({required this.path});

  factory DependenciesImage_gallery_saver.fromJson(Map<String, dynamic> json) {
    return DependenciesImage_gallery_saver(
      path: json['path'],
    );
  }
}

class DependenciesIsar_flutter_libs {
  final String path;

  const DependenciesIsar_flutter_libs({required this.path});

  factory DependenciesIsar_flutter_libs.fromJson(Map<String, dynamic> json) {
    return DependenciesIsar_flutter_libs(
      path: json['path'],
    );
  }
}

class DependenciesGen_global_config {
  final String path;

  const DependenciesGen_global_config({required this.path});

  factory DependenciesGen_global_config.fromJson(Map<String, dynamic> json) {
    return DependenciesGen_global_config(
      path: json['path'],
    );
  }
}

class Dev_dependencies {
  final Dev_dependenciesFlutter_test flutter_test;
  final String flutter_lints;
  final String build_runner;
  final String isar_generator;
  final String json_serializable;

  const Dev_dependencies(
      {required this.flutter_test,
        required this.flutter_lints,
        required this.build_runner,
        required this.isar_generator,
        required this.json_serializable});

  factory Dev_dependencies.fromJson(Map<String, dynamic> json) {
    return Dev_dependencies(
      flutter_test: Dev_dependenciesFlutter_test.fromJson(
          Map<String, dynamic>.from(json['flutter_test'] ?? const {})),
      flutter_lints: json['flutter_lints'],
      build_runner: json['build_runner'],
      isar_generator: json['isar_generator'],
      json_serializable: json['json_serializable'],
    );
  }
}

class Dev_dependenciesFlutter_test {
  final String sdk;

  const Dev_dependenciesFlutter_test({required this.sdk});

  factory Dev_dependenciesFlutter_test.fromJson(Map<String, dynamic> json) {
    return Dev_dependenciesFlutter_test(
      sdk: json['sdk'],
    );
  }
}

class Flutter {
  final bool uses_material_design;
  final List<String> assets;

  const Flutter({required this.uses_material_design, required this.assets});

  factory Flutter.fromJson(Map<String, dynamic> json) {
    return Flutter(
      uses_material_design: json['uses-material-design'],
      assets: List<String>.from(json['assets'] ?? []),
    );
  }
}

var yamlMap = YamlEntity.fromJson({
  "name": "tomato",
  "description": "A new Flutter project.",
  "publish_to": "none",
  "version": "5.1.1+52",
  "app_name": "番茄斗图表情包",
  "package_name": "com.cartoon.tomato",
  "android_sign": "manhua360",
  "base_url": "https://aiman-dev.getprime.cn/emoji/v1/",
  "environment": {"sdk": "^3.8.1"},
  "fluwx": {"app_id": "123456", "debug_logging": true, "android": null},
  "dependencies": {
    "flutter": {"sdk": "flutter"},
    "get": "^4.7.2",
    "path_provider": "^2.1.5",
    "flutter_easyloading": "^3.0.5",
    "intl": "^0.20.2",
    "event_bus": "^2.0.1",
    "image_gallery_saver": {"path": "packages/image_gallery_saver"},
    "image_picker": "^1.1.2",
    "flutter_colorpicker": "^1.1.0",
    "share_plus": "^11.0.0",
    "archive": "^4.0.7",
    "image": "^4.5.4",
    "reorderables": "^0.6.0",
    "isar": "3.1.0",
    "shared_preferences": "^2.5.3",
    "path": "^1.9.1",
    "yaml": "^3.1.3",
    "source_gen": "^1.5.0",
    "analyzer": "^5.13.0",
    "build": "^2.4.1",
    "meta": "^1.16.0",
    "isar_flutter_libs": {"path": "packages/isar_flutter_libs"},
    "webview_flutter": "^4.13.0",
    "video_player": "^2.10.0",
    "fluwx": "^5.6.0",
    "json_annotation": "^4.9.0",
    "gen_global_config": {"path": "/Users/jimo/IdeaProjects/gen_global_config"},
    "dio": "^5.8.0+1"
  },
  "dev_dependencies": {
    "flutter_test": {"sdk": "flutter"},
    "flutter_lints": "^5.0.0",
    "build_runner": "^2.4.13",
    "isar_generator": "3.1.0",
    "json_serializable": "^6.8.0"
  },
  "flutter": {
    "uses-material-design": true,
    "assets": ["assets/"]
  }
});

  • 你可以直接使用yamlMap获取yaml文件的配置

Libraries

gen_global_config