flutter_string_get_config.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import 'package:yaml/yaml.dart';
  2. import 'dart:io';
  3. import 'package:path/path.dart' as path;
  4. class FlutterStringGetConfig {
  5. String inputDir;
  6. String outputFile;
  7. FlutterStringGetConfig({
  8. required this.inputDir,
  9. required this.outputFile,
  10. });
  11. factory FlutterStringGetConfig.defaults() {
  12. return FlutterStringGetConfig(
  13. inputDir: 'assets/string/base/*.xml',
  14. outputFile: 'lib/resource/string.gen.dart',
  15. );
  16. }
  17. factory FlutterStringGetConfig.fromProject() {
  18. try {
  19. final getConfig = FlutterStringGetConfig.defaults();
  20. final file = File('pubspec.yaml');
  21. if (!file.existsSync()) return getConfig;
  22. final yamlContent = file.readAsStringSync();
  23. final yaml = loadYaml(yamlContent);
  24. final config = yaml['flutter_string_get'];
  25. if (config == null) return getConfig;
  26. String input = _normalizePath(config['input']?.toString());
  27. String output = _normalizePath(config['output']?.toString());
  28. if (input.isNotEmpty) {
  29. getConfig.inputDir = input;
  30. }
  31. if (output.isNotEmpty) {
  32. getConfig.outputFile = output;
  33. }
  34. return getConfig;
  35. } catch (e) {
  36. print('Error parsing flutter_string_get config: $e');
  37. return FlutterStringGetConfig.defaults();
  38. }
  39. }
  40. static String _normalizePath(String? rawPath, {bool isDirectory = false}) {
  41. if (rawPath == null || rawPath.isEmpty) return '';
  42. // 强制替换所有反斜杠为正斜杠(跨平台兼容)
  43. final unifiedPath = rawPath.replaceAll(r'\', '/');
  44. // 保留目录末尾的斜杠
  45. bool hasTrailingSlash = unifiedPath.endsWith('/');
  46. String normalized = unifiedPath;
  47. // 仅处理路径中的 `.` 和 `..`
  48. normalized = path.posix.normalize(normalized); // 使用 posix 风格的 normalize
  49. if (isDirectory && !hasTrailingSlash) {
  50. normalized += '/';
  51. }
  52. return normalized;
  53. }
  54. }