generationContent function
Implementation
String generationContent({
required List<String> keys,
required Map<String, Object?> arbResource,
required L10nConfig l10nConfig,
}) {
final buffer = StringBuffer()
..writeln(
'''
import 'dart:convert';
import '${l10nConfig.outputLocalizationFile}';
import 'package:sonnet/sonnet.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
export 'package:flutter_localizations/flutter_localizations.dart';
export 'package:sonnet/sonnet.dart';
class SonnetLocalizations extends ${l10nConfig.outputClass} {
final ${l10nConfig.outputClass} _fallbacks;
SonnetLocalizations(String locale, ${l10nConfig.outputClass} fallbackTexts) : _fallbacks = fallbackTexts, super(locale);
static const LocalizationsDelegate<${l10nConfig.outputClass}> delegate = _SonnetLocalizationsDelegate();
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates = <
LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
static const List<Locale> supportedLocales = ${l10nConfig.outputClass}.supportedLocales;
''',
);
final arb = AppResourceBundle(arbResource);
final messages = arb.resourceIds
.map((id) => Message(arb, id, false))
.toList(growable: false);
for (final message in messages) {
final key = message.resourceId;
final placeholders = message.placeholders.values;
if (message.placeholders.isEmpty) {
buffer.writeln(
"""\t@override String get $key => Sonnet.get(localeName, '$key', fallback: _fallbacks.$key);""",
);
} else {
final params = generateMethodParameters(message).join(', ');
final values =
placeholders.map((placeholder) => placeholder.name).join(', ');
final args = placeholders
.map((placeholder) => "'${placeholder.name}':${placeholder.name}")
.join(', ');
buffer.writeln(
"""\t@override String $key($params) => Sonnet.get(localeName, '$key', args: {$args}, fallback: _fallbacks.$key($values));""",
);
}
}
buffer.writeln('''
}
class _SonnetLocalizationsDelegate extends LocalizationsDelegate<${l10nConfig.outputClass}> {
const _SonnetLocalizationsDelegate();
@override
Future<${l10nConfig.outputClass}> load(Locale locale) =>
${l10nConfig.outputClass}.delegate.load(locale)
.then((fallback) {
Sonnet.initialLoad(locale);
return SonnetLocalizations(locale.toString(), fallback);
});
@override
bool isSupported(Locale locale) => ${l10nConfig.outputClass}.supportedLocales.contains(locale);
@override
bool shouldReload(_SonnetLocalizationsDelegate old) => false;
}
extension SonnetBuildContextExt on BuildContext {
SonnetLocalizations get sonnet => SonnetLocalizations.of(this)!;
changeSonnetLocale(String locale) => Sonnet.changeLocale(locale);
}
''');
return buffer.toString();
}