4
4
5
5
import 'dart:io' show Platform;
6
6
7
+ import 'package:flutter/foundation.dart' ;
7
8
import 'package:flutter/rendering.dart' ;
8
9
import 'package:photo_manager/photo_manager.dart' show AssetType;
9
10
10
11
/// All text delegates.
11
- const List <AssetPickerTextDelegate > assetPickerTextDelegates =
12
- < AssetPickerTextDelegate > [
12
+ const assetPickerTextDelegates = < AssetPickerTextDelegate > [
13
13
AssetPickerTextDelegate (),
14
14
EnglishAssetPickerTextDelegate (),
15
15
HebrewAssetPickerTextDelegate (),
@@ -28,13 +28,30 @@ AssetPickerTextDelegate assetPickerTextDelegateFromLocale(Locale? locale) {
28
28
if (locale == null ) {
29
29
return const AssetPickerTextDelegate ();
30
30
}
31
+
31
32
final String languageCode = locale.languageCode.toLowerCase ();
32
- for (final AssetPickerTextDelegate delegate in assetPickerTextDelegates) {
33
- if (delegate.languageCode == languageCode) {
34
- return delegate;
35
- }
33
+ final String ? scriptCode = locale.scriptCode? .toLowerCase ();
34
+ final String ? countryCode = locale.countryCode? .toLowerCase ();
35
+
36
+ final matchedByLanguage = assetPickerTextDelegates.where (
37
+ (e) => e.languageCode == languageCode,
38
+ );
39
+ if (matchedByLanguage.isEmpty) {
40
+ return const AssetPickerTextDelegate ();
41
+ }
42
+
43
+ final matchedByScript = scriptCode != null
44
+ ? matchedByLanguage.where ((e) => e.scriptCode == scriptCode)
45
+ : null ;
46
+ if (matchedByScript == null || matchedByScript.isEmpty) {
47
+ return matchedByLanguage.first;
36
48
}
37
- return const AssetPickerTextDelegate ();
49
+
50
+ final matchedByCountry = countryCode != null
51
+ ? matchedByScript.where ((e) => e.countryCode == countryCode)
52
+ : null ;
53
+
54
+ return matchedByCountry? .firstOrNull ?? matchedByScript.first;
38
55
}
39
56
40
57
/// Text delegate that controls text in widgets.
@@ -44,6 +61,17 @@ class AssetPickerTextDelegate {
44
61
45
62
String get languageCode => 'zh' ;
46
63
64
+ String ? get scriptCode => 'Hans' ;
65
+
66
+ String ? get countryCode => null ;
67
+
68
+ @nonVirtual
69
+ Locale get locale => Locale .fromSubtags (
70
+ languageCode: languageCode,
71
+ scriptCode: scriptCode,
72
+ countryCode: countryCode,
73
+ );
74
+
47
75
/// Confirm string for the confirm button.
48
76
/// ç¡®è®¤æŒ‰é’®çš„å—æ®µ
49
77
String get confirm => '确认' ;
0 commit comments