@@ -27,66 +27,70 @@ part 'strings_en.g.dart';
2727/// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum
2828/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check
2929enum AppLocale with BaseAppLocale <AppLocale , Translations > {
30- en (languageCode: 'en' ),
31- id (languageCode: 'id' );
32-
33- const AppLocale ({
34- required this .languageCode,
35- this .scriptCode, // ignore: unused_element, unused_element_parameter
36- this .countryCode, // ignore: unused_element, unused_element_parameter
37- });
38-
39- @override final String languageCode;
40- @override final String ? scriptCode;
41- @override final String ? countryCode;
42-
43- @override
44- Future <Translations > build ({
45- Map <String , Node >? overrides,
46- PluralResolver ? cardinalResolver,
47- PluralResolver ? ordinalResolver,
48- }) async {
49- switch (this ) {
50- case AppLocale .en:
51- return TranslationsEn (
52- overrides: overrides,
53- cardinalResolver: cardinalResolver,
54- ordinalResolver: ordinalResolver,
55- );
56- case AppLocale .id:
57- await l_id.loadLibrary ();
58- return l_id.TranslationsId (
59- overrides: overrides,
60- cardinalResolver: cardinalResolver,
61- ordinalResolver: ordinalResolver,
62- );
63- }
64- }
65-
66- @override
67- Translations buildSync ({
68- Map <String , Node >? overrides,
69- PluralResolver ? cardinalResolver,
70- PluralResolver ? ordinalResolver,
71- }) {
72- switch (this ) {
73- case AppLocale .en:
74- return TranslationsEn (
75- overrides: overrides,
76- cardinalResolver: cardinalResolver,
77- ordinalResolver: ordinalResolver,
78- );
79- case AppLocale .id:
80- return l_id.TranslationsId (
81- overrides: overrides,
82- cardinalResolver: cardinalResolver,
83- ordinalResolver: ordinalResolver,
84- );
85- }
86- }
87-
88- /// Gets current instance managed by [LocaleSettings] .
89- Translations get translations => LocaleSettings .instance.getTranslations (this );
30+ en (languageCode: 'en' ),
31+ id (languageCode: 'id' );
32+
33+ const AppLocale ({
34+ required this .languageCode,
35+ this .scriptCode, // ignore: unused_element, unused_element_parameter
36+ this .countryCode, // ignore: unused_element, unused_element_parameter
37+ });
38+
39+ @override
40+ final String languageCode;
41+ @override
42+ final String ? scriptCode;
43+ @override
44+ final String ? countryCode;
45+
46+ @override
47+ Future <Translations > build ({
48+ Map <String , Node >? overrides,
49+ PluralResolver ? cardinalResolver,
50+ PluralResolver ? ordinalResolver,
51+ }) async {
52+ switch (this ) {
53+ case AppLocale .en:
54+ return TranslationsEn (
55+ overrides: overrides,
56+ cardinalResolver: cardinalResolver,
57+ ordinalResolver: ordinalResolver,
58+ );
59+ case AppLocale .id:
60+ await l_id.loadLibrary ();
61+ return l_id.TranslationsId (
62+ overrides: overrides,
63+ cardinalResolver: cardinalResolver,
64+ ordinalResolver: ordinalResolver,
65+ );
66+ }
67+ }
68+
69+ @override
70+ Translations buildSync ({
71+ Map <String , Node >? overrides,
72+ PluralResolver ? cardinalResolver,
73+ PluralResolver ? ordinalResolver,
74+ }) {
75+ switch (this ) {
76+ case AppLocale .en:
77+ return TranslationsEn (
78+ overrides: overrides,
79+ cardinalResolver: cardinalResolver,
80+ ordinalResolver: ordinalResolver,
81+ );
82+ case AppLocale .id:
83+ return l_id.TranslationsId (
84+ overrides: overrides,
85+ cardinalResolver: cardinalResolver,
86+ ordinalResolver: ordinalResolver,
87+ );
88+ }
89+ }
90+
91+ /// Gets current instance managed by [LocaleSettings] .
92+ Translations get translations =>
93+ LocaleSettings .instance.getTranslations (this );
9094}
9195
9296/// Method A: Simple
@@ -115,10 +119,14 @@ Translations get t => LocaleSettings.instance.currentTranslations;
115119/// final t = Translations.of(context); // Get t variable.
116120/// String a = t.someKey.anotherKey; // Use t variable.
117121/// String b = t['someKey.anotherKey'] ; // Only for edge cases!
118- class TranslationProvider extends BaseTranslationProvider <AppLocale , Translations > {
119- TranslationProvider ({required super .child}) : super (settings: LocaleSettings .instance);
120-
121- static InheritedLocaleData <AppLocale , Translations > of (BuildContext context) => InheritedLocaleData .of <AppLocale , Translations >(context);
122+ class TranslationProvider
123+ extends BaseTranslationProvider <AppLocale , Translations > {
124+ TranslationProvider ({required super .child})
125+ : super (settings: LocaleSettings .instance);
126+
127+ static InheritedLocaleData <AppLocale , Translations > of (
128+ BuildContext context,
129+ ) => InheritedLocaleData .of <AppLocale , Translations >(context);
122130}
123131
124132/// Method B shorthand via [BuildContext] extension method.
@@ -127,56 +135,91 @@ class TranslationProvider extends BaseTranslationProvider<AppLocale, Translation
127135/// Usage (e.g. in a widget's build method):
128136/// context.t.someKey.anotherKey
129137extension BuildContextTranslationsExtension on BuildContext {
130- Translations get t => TranslationProvider .of (this ).translations;
138+ Translations get t => TranslationProvider .of (this ).translations;
131139}
132140
133141/// Manages all translation instances and the current locale
134- class LocaleSettings extends BaseFlutterLocaleSettings <AppLocale , Translations > {
135- LocaleSettings ._() : super (
136- utils: AppLocaleUtils .instance,
137- lazy: true ,
138- );
139-
140- static final instance = LocaleSettings ._();
141-
142- // static aliases (checkout base methods for documentation)
143- static AppLocale get currentLocale => instance.currentLocale;
144- static Stream <AppLocale > getLocaleStream () => instance.getLocaleStream ();
145- static Future <AppLocale > setLocale (AppLocale locale, {bool ? listenToDeviceLocale = false }) => instance.setLocale (locale, listenToDeviceLocale: listenToDeviceLocale);
146- static Future <AppLocale > setLocaleRaw (String rawLocale, {bool ? listenToDeviceLocale = false }) => instance.setLocaleRaw (rawLocale, listenToDeviceLocale: listenToDeviceLocale);
147- static Future <AppLocale > useDeviceLocale () => instance.useDeviceLocale ();
148- static Future <void > setPluralResolver ({String ? language, AppLocale ? locale, PluralResolver ? cardinalResolver, PluralResolver ? ordinalResolver}) => instance.setPluralResolver (
149- language: language,
150- locale: locale,
151- cardinalResolver: cardinalResolver,
152- ordinalResolver: ordinalResolver,
153- );
154-
155- // synchronous versions
156- static AppLocale setLocaleSync (AppLocale locale, {bool ? listenToDeviceLocale = false }) => instance.setLocaleSync (locale, listenToDeviceLocale: listenToDeviceLocale);
157- static AppLocale setLocaleRawSync (String rawLocale, {bool ? listenToDeviceLocale = false }) => instance.setLocaleRawSync (rawLocale, listenToDeviceLocale: listenToDeviceLocale);
158- static AppLocale useDeviceLocaleSync () => instance.useDeviceLocaleSync ();
159- static void setPluralResolverSync ({String ? language, AppLocale ? locale, PluralResolver ? cardinalResolver, PluralResolver ? ordinalResolver}) => instance.setPluralResolverSync (
160- language: language,
161- locale: locale,
162- cardinalResolver: cardinalResolver,
163- ordinalResolver: ordinalResolver,
164- );
142+ class LocaleSettings
143+ extends BaseFlutterLocaleSettings <AppLocale , Translations > {
144+ LocaleSettings ._() : super (utils: AppLocaleUtils .instance, lazy: true );
145+
146+ static final instance = LocaleSettings ._();
147+
148+ // static aliases (checkout base methods for documentation)
149+ static AppLocale get currentLocale => instance.currentLocale;
150+ static Stream <AppLocale > getLocaleStream () => instance.getLocaleStream ();
151+ static Future <AppLocale > setLocale (
152+ AppLocale locale, {
153+ bool ? listenToDeviceLocale = false ,
154+ }) => instance.setLocale (locale, listenToDeviceLocale: listenToDeviceLocale);
155+ static Future <AppLocale > setLocaleRaw (
156+ String rawLocale, {
157+ bool ? listenToDeviceLocale = false ,
158+ }) => instance.setLocaleRaw (
159+ rawLocale,
160+ listenToDeviceLocale: listenToDeviceLocale,
161+ );
162+ static Future <AppLocale > useDeviceLocale () => instance.useDeviceLocale ();
163+ static Future <void > setPluralResolver ({
164+ String ? language,
165+ AppLocale ? locale,
166+ PluralResolver ? cardinalResolver,
167+ PluralResolver ? ordinalResolver,
168+ }) => instance.setPluralResolver (
169+ language: language,
170+ locale: locale,
171+ cardinalResolver: cardinalResolver,
172+ ordinalResolver: ordinalResolver,
173+ );
174+
175+ // synchronous versions
176+ static AppLocale setLocaleSync (
177+ AppLocale locale, {
178+ bool ? listenToDeviceLocale = false ,
179+ }) => instance.setLocaleSync (
180+ locale,
181+ listenToDeviceLocale: listenToDeviceLocale,
182+ );
183+ static AppLocale setLocaleRawSync (
184+ String rawLocale, {
185+ bool ? listenToDeviceLocale = false ,
186+ }) => instance.setLocaleRawSync (
187+ rawLocale,
188+ listenToDeviceLocale: listenToDeviceLocale,
189+ );
190+ static AppLocale useDeviceLocaleSync () => instance.useDeviceLocaleSync ();
191+ static void setPluralResolverSync ({
192+ String ? language,
193+ AppLocale ? locale,
194+ PluralResolver ? cardinalResolver,
195+ PluralResolver ? ordinalResolver,
196+ }) => instance.setPluralResolverSync (
197+ language: language,
198+ locale: locale,
199+ cardinalResolver: cardinalResolver,
200+ ordinalResolver: ordinalResolver,
201+ );
165202}
166203
167204/// Provides utility functions without any side effects.
168205class AppLocaleUtils extends BaseAppLocaleUtils <AppLocale , Translations > {
169- AppLocaleUtils ._() : super (
170- baseLocale: AppLocale .en,
171- locales: AppLocale .values,
172- );
173-
174- static final instance = AppLocaleUtils ._();
175-
176- // static aliases (checkout base methods for documentation)
177- static AppLocale parse (String rawLocale) => instance.parse (rawLocale);
178- static AppLocale parseLocaleParts ({required String languageCode, String ? scriptCode, String ? countryCode}) => instance.parseLocaleParts (languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode);
179- static AppLocale findDeviceLocale () => instance.findDeviceLocale ();
180- static List <Locale > get supportedLocales => instance.supportedLocales;
181- static List <String > get supportedLocalesRaw => instance.supportedLocalesRaw;
206+ AppLocaleUtils ._()
207+ : super (baseLocale: AppLocale .en, locales: AppLocale .values);
208+
209+ static final instance = AppLocaleUtils ._();
210+
211+ // static aliases (checkout base methods for documentation)
212+ static AppLocale parse (String rawLocale) => instance.parse (rawLocale);
213+ static AppLocale parseLocaleParts ({
214+ required String languageCode,
215+ String ? scriptCode,
216+ String ? countryCode,
217+ }) => instance.parseLocaleParts (
218+ languageCode: languageCode,
219+ scriptCode: scriptCode,
220+ countryCode: countryCode,
221+ );
222+ static AppLocale findDeviceLocale () => instance.findDeviceLocale ();
223+ static List <Locale > get supportedLocales => instance.supportedLocales;
224+ static List <String > get supportedLocalesRaw => instance.supportedLocalesRaw;
182225}
0 commit comments