From eec70ffcc6a72581f8f5979ad4ac3e2c76ad2901 Mon Sep 17 00:00:00 2001 From: Michalina Majewska Date: Tue, 14 Apr 2026 09:54:43 +0200 Subject: [PATCH 1/3] Replace hardcoded class name in the template --- lib/src/generator/model/templates.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/src/generator/model/templates.dart b/lib/src/generator/model/templates.dart index 0d11313..bfcd41f 100644 --- a/lib/src/generator/model/templates.dart +++ b/lib/src/generator/model/templates.dart @@ -17,7 +17,7 @@ class @(baseClass)Remote extends @(baseClass) { final @(baseClass) base; final ArbWorker _arb; - static const LocalizationsDelegate<@(baseClass)> delegate = _L10nDelegateWithOta(L10n.delegate); + static const LocalizationsDelegate<@(baseClass)> delegate = _@(baseClass)DelegateWithOta(@(baseClass).delegate); /// A list of this localizations delegate along with the default localizations /// delegates. @@ -40,7 +40,6 @@ class @(baseClass)Remote extends @(baseClass) { static const List supportedLocales = @(baseClass).supportedLocales; '''; - const footer = ''' class _@(baseClass)DelegateWithOta extends LocalizationsDelegate<@(baseClass)> { const _@(baseClass)DelegateWithOta(this.baseDelegate); @@ -61,4 +60,4 @@ class _@(baseClass)DelegateWithOta extends LocalizationsDelegate<@(baseClass)> { @override bool shouldReload(_@(baseClass)DelegateWithOta old) => false; } -'''; \ No newline at end of file +'''; From d5bd2cf1d8c15a7fa64179144bf0dd8b7a39be1b Mon Sep 17 00:00:00 2001 From: Michalina Majewska Date: Tue, 14 Apr 2026 10:32:08 +0200 Subject: [PATCH 2/3] Support multiple parameters with the same type --- lib/src/generator/generator.dart | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/src/generator/generator.dart b/lib/src/generator/generator.dart index 5bbfcfd..b1c1087 100644 --- a/lib/src/generator/generator.dart +++ b/lib/src/generator/generator.dart @@ -37,16 +37,17 @@ Future generate([String path = 'l10n.yaml']) async { final key = line.split(' ')[1].split('(').first; final paramPairs = lines[i].split('(').last.split(')')[0].split(','); + // Parameters map of entries name:type, e.g. 'count':'int' final parameters = {}; for (var pair in paramPairs) { final parts = pair.trim().split(' '); - parameters[parts[0].trimRight()] = parts[1].trimLeft(); + parameters[parts[1].trimRight()] = parts[0].trimLeft(); } output.writeln(_generateMethod(key, parameters)); } - } else if(line.startsWith('//')) { + } else if (line.startsWith('//')) { lastComments.add(lines[i]); } else { lastComments.clear(); @@ -66,11 +67,13 @@ String _generateField(String key) { } String _generateMethod(String key, Map parameters) { - final sParameters = parameters.entries.map((e) => '${e.key} ${e.value}').join(', '); - final sParameterNames = parameters.values.join(', '); + final sParameters = + parameters.entries.map((e) => '${e.value} ${e.key}').join(', '); + final sParameterNames = parameters.keys.join(', '); // like _arb.get('title', {'name': name}) for arb string '"title": "translated title {name}"' - final sArbCall = '_arb.get(\'$key\', {${parameters.values.map((e) => '\'$e\': $e').join(', ')}})'; + final sArbCall = + '_arb.get(\'$key\', {${parameters.keys.map((e) => '\'$e\': $e').join(', ')}})'; return '\tString $key($sParameters) => $sArbCall ?? base.$key($sParameterNames);'; } From cf30027f4de9288b6d241691f82976a7ae94387f Mon Sep 17 00:00:00 2001 From: Michalina Majewska Date: Tue, 14 Apr 2026 11:53:13 +0200 Subject: [PATCH 3/3] Support multiline method signatures --- lib/src/generator/generator.dart | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/src/generator/generator.dart b/lib/src/generator/generator.dart index b1c1087..89b884b 100644 --- a/lib/src/generator/generator.dart +++ b/lib/src/generator/generator.dart @@ -35,15 +35,17 @@ Future generate([String path = 'l10n.yaml']) async { output.writeln(_generateField(key)); } else { final key = line.split(' ')[1].split('(').first; - final paramPairs = lines[i].split('(').last.split(')')[0].split(','); - - // Parameters map of entries name:type, e.g. 'count':'int' - final parameters = {}; - - for (var pair in paramPairs) { - final parts = pair.trim().split(' '); - parameters[parts[1].trimRight()] = parts[0].trimLeft(); - } + final methodSignature = _getMethodSignature(lines, i); + i += methodSignature.length - 1; + final paramPairs = + methodSignature.join(' ').split('(').last.split(')')[0].split(','); + + // Parameters map of name:type, e.g. 'count':'int' + final parameters = { + for (final pair in paramPairs) + if (pair.trim().split(' ') case final parts when parts.length > 1) + parts[1].trimRight(): parts[0].trimLeft(), + }; output.writeln(_generateMethod(key, parameters)); } @@ -62,6 +64,15 @@ Future generate([String path = 'l10n.yaml']) async { await output.close(); } +List _getMethodSignature(List lines, int start) { + for (var i = start; i < lines.length; i++) { + if (lines[i].contains(';')) { + return lines.sublist(start, i + 1); + } + } + return lines.sublist(start); +} + String _generateField(String key) { return '\tString get $key => _arb.get(\'$key\') ?? base.$key;'; }