| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import 'package:yaml/yaml.dart';
- import 'dart:io';
- import 'package:path/path.dart' as path;
- class FlutterStringGetConfig {
- String inputDir;
- String outputFile;
- String language;
- FlutterStringGetConfig({
- required this.inputDir,
- required this.outputFile,
- this.language = 'zh_CN',
- });
- factory FlutterStringGetConfig.defaults() {
- return FlutterStringGetConfig(
- inputDir: 'assets/string/base/*.xml',
- outputFile: 'lib/resource/string.gen.dart',
- language: 'zh_CN',
- );
- }
- factory FlutterStringGetConfig.fromProject() {
- try {
- final getConfig = FlutterStringGetConfig.defaults();
- final file = File('pubspec.yaml');
- if (!file.existsSync()) return getConfig;
- final yamlContent = file.readAsStringSync();
- final yaml = loadYaml(yamlContent);
- final config = yaml['flutter_string_get'];
- if (config == null) return getConfig;
- String input = _normalizePath(config['input']?.toString());
- String output = _normalizePath(config['output']?.toString());
- String language = _normalizePath(config['language']?.toString());
- if (input.isNotEmpty) {
- getConfig.inputDir = input;
- }
- if (output.isNotEmpty) {
- getConfig.outputFile = output;
- }
- if (language.isNotEmpty) {
- getConfig.language = language;
- }
- return getConfig;
- } catch (e) {
- print('Error parsing flutter_string_get config: $e');
- return FlutterStringGetConfig.defaults();
- }
- }
- static String _normalizePath(String? rawPath, {bool isDirectory = false}) {
- if (rawPath == null || rawPath.isEmpty) return '';
- // 强制替换所有反斜杠为正斜杠(跨平台兼容)
- final unifiedPath = rawPath.replaceAll(r'\', '/');
- // 保留目录末尾的斜杠
- bool hasTrailingSlash = unifiedPath.endsWith('/');
- String normalized = unifiedPath;
- // 仅处理路径中的 `.` 和 `..`
- normalized = path.posix.normalize(normalized); // 使用 posix 风格的 normalize
- if (isDirectory && !hasTrailingSlash) {
- normalized += '/';
- }
- return normalized;
- }
- }
|