Skip to content

Commit fa0e4e6

Browse files
committed
Merge branch 'feat/add-linked-files' into develop
2 parents 20a5f7c + 0cd09b1 commit fa0e4e6

File tree

8 files changed

+48
-33
lines changed

8 files changed

+48
-33
lines changed

bin/audit/audit_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:path/path.dart';
55
import 'package:easy_localization/src/file_loaders/io_file_loader.dart';
66

77
class AuditCommand {
8-
void run({required String transDir, required String srcDir}) async {
8+
Future<void> run({required String transDir, required String srcDir}) async {
99
try {
1010
final translationDir = Directory(transDir);
1111
final sourceDir = Directory(srcDir);

example/lib/generated/codegen_loader.g.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import 'package:easy_localization/easy_localization.dart'
88
show AssetLoader, JsonLinkedFileResolver, RootBundleFileLoader;
99

1010
class CodegenLoader extends AssetLoader {
11-
const CodegenLoader() : super(linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
11+
const CodegenLoader()
12+
: super(
13+
linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
14+
fileLoader: const RootBundleFileLoader());
1215

1316
@override
1417
Future<Map<String, dynamic>> load(String fullPath, Locale locale) {

lib/src/asset_loader.dart

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'dart:convert';
22
import 'dart:ui';
33
import 'package:easy_localization/easy_localization.dart';
4+
import 'package:easy_localization/src/file_loaders/file_loader.dart';
45
import 'package:easy_localization/src/file_loaders/io_file_loader.dart';
5-
import 'package:flutter/services.dart';
66

77
/// abstract class used to building your Custom AssetLoader
88
/// Example:
@@ -17,9 +17,10 @@ import 'package:flutter/services.dart';
1717
/// ```
1818
abstract class AssetLoader {
1919
// Place inside class RootBundleAssetLoader
20+
final FileLoader fileLoader;
2021
final LinkedFileResolver linkedFileResolver;
2122

22-
const AssetLoader({required this.linkedFileResolver});
23+
const AssetLoader({required this.linkedFileResolver, required this.fileLoader});
2324

2425
Future<Map<String, dynamic>?> load(String path, Locale locale);
2526
}
@@ -28,13 +29,20 @@ abstract class AssetLoader {
2829
/// default used is RootBundleAssetLoader which uses flutter's assetloader
2930
///
3031
class RootBundleAssetLoader extends AssetLoader {
31-
const RootBundleAssetLoader({LinkedFileResolver? linkedFileResolver})
32-
: super(
33-
linkedFileResolver: linkedFileResolver ?? const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
32+
const RootBundleAssetLoader({required LinkedFileResolver linkedFileResolver, required FileLoader fileLoader})
33+
: super(linkedFileResolver: linkedFileResolver, fileLoader: fileLoader);
34+
35+
factory RootBundleAssetLoader.fromRootBundle() {
36+
return const RootBundleAssetLoader(
37+
linkedFileResolver: JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
38+
fileLoader: RootBundleFileLoader(),
39+
);
40+
}
3441

3542
factory RootBundleAssetLoader.fromIOFile() {
3643
return const RootBundleAssetLoader(
3744
linkedFileResolver: JsonLinkedFileResolver(fileLoader: IOFileLoader()),
45+
fileLoader: IOFileLoader(),
3846
);
3947
}
4048

@@ -47,7 +55,7 @@ class RootBundleAssetLoader extends AssetLoader {
4755
var localePath = getLocalePath(path, locale);
4856
EasyLocalization.logger.debug('Load asset from $path');
4957

50-
Map<String, dynamic> baseJson = json.decode(await linkedFileResolver.fileLoader.loadString(localePath));
58+
Map<String, dynamic> baseJson = json.decode(await fileLoader.loadString(localePath));
5159
return await linkedFileResolver.resolveLinkedFiles(
5260
basePath: path,
5361
languageCode: locale.languageCode,

lib/src/easy_localization_app.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,10 @@ class EasyLocalization extends StatefulWidget {
137137
this.useFallbackTranslations = false,
138138
this.useFallbackTranslationsForEmptyResources = false,
139139
this.ignorePluralRules = true,
140-
this.assetLoader = const RootBundleAssetLoader(),
140+
this.assetLoader = const RootBundleAssetLoader(
141+
fileLoader: RootBundleFileLoader(),
142+
linkedFileResolver: JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
143+
),
141144
this.extraAssetLoaders,
142145
this.saveLocale = true,
143146
this.errorWidget,

lib/src/linked_file_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class JsonLinkedFileResolver extends LinkedFileResolver {
8787
languageCode: languageCode,
8888
baseJson: value,
8989
visited: visited,
90-
depth: depth + 1,
90+
depth: depth,
9191
countryCode: countryCode,
9292
);
9393
}

test/easy_localization_extra_asset_loaders_test.dart

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ void main() {
2929
expect(result.entries.length, 1);
3030
});
3131

32-
test('load assets from external loader and merge with asset loader',
33-
() async {
32+
test('load assets from external loader and merge with asset loader', () async {
3433
final EasyLocalizationController controller = EasyLocalizationController(
3534
forceLocale: const Locale('en'),
3635
path: 'path/en.json',
@@ -42,11 +41,10 @@ void main() {
4241
log(e.toString());
4342
},
4443
assetLoader: const ImmutableJsonAssetLoader(),
45-
extraAssetLoaders: [const ExternalAssetLoader()],
44+
extraAssetLoaders: [ExternalAssetLoader()],
4645
);
4746

48-
final Map<String, dynamic> result =
49-
await controller.loadTranslationData(const Locale('en'));
47+
final Map<String, dynamic> result = await controller.loadTranslationData(const Locale('en'));
5048

5149
expect(result, {
5250
'test': 'test',
@@ -57,9 +55,7 @@ void main() {
5755
expect(result.entries.length, 4);
5856
});
5957

60-
test(
61-
'load assets from external loader with nested translations and merge with asset loader',
62-
() async {
58+
test('load assets from external loader with nested translations and merge with asset loader', () async {
6359
final EasyLocalizationController controller = EasyLocalizationController(
6460
forceLocale: const Locale('en'),
6561
path: 'path/en.json',
@@ -71,11 +67,10 @@ void main() {
7167
log(e.toString());
7268
},
7369
assetLoader: const ImmutableJsonAssetLoader(),
74-
extraAssetLoaders: [const NestedAssetLoader()],
70+
extraAssetLoaders: [NestedAssetLoader()],
7571
);
7672

77-
final Map<String, dynamic> result =
78-
await controller.loadTranslationData(const Locale('en'));
73+
final Map<String, dynamic> result = await controller.loadTranslationData(const Locale('en'));
7974

8075
expect(result, {
8176
'test': 'test',
@@ -90,9 +85,7 @@ void main() {
9085
expect(result.entries.length, 2);
9186
});
9287

93-
test(
94-
'load assets from external loader and merge duplicates with asset loader',
95-
() async {
88+
test('load assets from external loader and merge duplicates with asset loader', () async {
9689
final EasyLocalizationController controller = EasyLocalizationController(
9790
forceLocale: const Locale('en'),
9891
path: 'path/en.json',
@@ -107,8 +100,7 @@ void main() {
107100
extraAssetLoaders: [const ImmutableJsonAssetLoader()],
108101
);
109102

110-
final Map<String, dynamic> result =
111-
await controller.loadTranslationData(const Locale('en'));
103+
final Map<String, dynamic> result = await controller.loadTranslationData(const Locale('en'));
112104

113105
expect(result, {'test': 'test'});
114106
expect(result.entries.length, 1);

test/easy_localization_widget_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void main() async {
116116
await tester.runAsync(() async {
117117
await tester.pumpWidget(EasyLocalization(
118118
path: '../../i18n',
119-
assetLoader: const RootBundleAssetLoader(),
119+
assetLoader: RootBundleAssetLoader.fromRootBundle(),
120120
supportedLocales: const [Locale('en', 'US')],
121121
child: const MyApp(),
122122
));

test/utils/test_asset_loaders.dart

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import 'package:easy_localization/easy_localization.dart'
55

66
class ImmutableJsonAssetLoader extends AssetLoader {
77
const ImmutableJsonAssetLoader()
8-
: super(linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
8+
: super(
9+
linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
10+
fileLoader: const RootBundleFileLoader());
911

1012
@override
1113
Future<Map<String, dynamic>> load(String fullPath, Locale locale) {
@@ -16,7 +18,10 @@ class ImmutableJsonAssetLoader extends AssetLoader {
1618
}
1719

1820
class JsonAssetLoader extends AssetLoader {
19-
const JsonAssetLoader() : super(linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
21+
const JsonAssetLoader()
22+
: super(
23+
linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
24+
fileLoader: const RootBundleFileLoader());
2025

2126
@override
2227
Future<Map<String, dynamic>> load(String fullPath, Locale locale) {
@@ -138,8 +143,10 @@ class JsonAssetLoader extends AssetLoader {
138143
}
139144

140145
class ExternalAssetLoader extends AssetLoader {
141-
const ExternalAssetLoader()
142-
: super(linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
146+
ExternalAssetLoader()
147+
: super(
148+
linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
149+
fileLoader: const RootBundleFileLoader());
143150

144151
@override
145152
Future<Map<String, dynamic>> load(String fullPath, Locale locale) => Future.value(const {
@@ -150,8 +157,10 @@ class ExternalAssetLoader extends AssetLoader {
150157
}
151158

152159
class NestedAssetLoader extends AssetLoader {
153-
const NestedAssetLoader()
154-
: super(linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()));
160+
NestedAssetLoader()
161+
: super(
162+
linkedFileResolver: const JsonLinkedFileResolver(fileLoader: RootBundleFileLoader()),
163+
fileLoader: const RootBundleFileLoader());
155164

156165
@override
157166
Future<Map<String, dynamic>> load(String fullPath, Locale locale) => Future.value({

0 commit comments

Comments
 (0)