diff --git a/lib/ui/fixtures/ui_test.dart b/lib/ui/fixtures/ui_test.dart index 032e227b870c3..4041573eb574a 100644 --- a/lib/ui/fixtures/ui_test.dart +++ b/lib/ui/fixtures/ui_test.dart @@ -450,6 +450,13 @@ void hooksTests() { } }); + test('deprecated region equals', () { + const Locale x = Locale('en', 'ZR'); + const Locale y = Locale('en', 'CD'); + expectEquals(x, y); + expectEquals(x.countryCode, y.countryCode); + }); + test('Window padding/insets/viewPadding/systemGestureInsets', () { _callHook( '_updateWindowMetrics', diff --git a/lib/ui/platform_dispatcher.dart b/lib/ui/platform_dispatcher.dart index f7b769b50ea94..f8c014a51875f 100644 --- a/lib/ui/platform_dispatcher.dart +++ b/lib/ui/platform_dispatcher.dart @@ -1768,6 +1768,852 @@ enum DisplayFeatureState { postureHalfOpened, } +// This map is generated by //flutter/tools/gen_locale.dart +// Mappings generated for language subtag registry as of 2019-02-27. +// static const Map _deprecatedRegionSubtagMap = { +// 'BU': 'MM', // Burma; deprecated 1989-12-05 +// 'DD': 'DE', // German Democratic Republic; deprecated 1990-10-30 +// 'FX': 'FR', // Metropolitan France; deprecated 1997-07-14 +// 'TP': 'TL', // East Timor; deprecated 2002-05-20 +// 'YD': 'YE', // Democratic Yemen; deprecated 1990-08-14 +// 'ZR': 'CD', // Zaire; deprecated 1997-07-14 +// }; + +// This jump table function is 2x faster than a Map and is generated by: +// https://gist.github.com/gaaclarke/533d5948ec242defb408eec1ce04c55f +String _deprecatedRegionSubtagMap(String x) { + final List units = x.codeUnits; + if (units.length != 2) { + return x; + } + switch (units[0]) { + case 66 /*B*/ : + { + switch (units[1]) { + case 85 /*U*/ : + return 'MM'; + } + break; + } + case 68 /*D*/ : + { + switch (units[1]) { + case 68 /*D*/ : + return 'DE'; + } + break; + } + case 70 /*F*/ : + { + switch (units[1]) { + case 88 /*X*/ : + return 'FR'; + } + break; + } + case 84 /*T*/ : + { + switch (units[1]) { + case 80 /*P*/ : + return 'TL'; + } + break; + } + case 89 /*Y*/ : + { + switch (units[1]) { + case 68 /*D*/ : + return 'YE'; + } + break; + } + case 90 /*Z*/ : + { + switch (units[1]) { + case 82 /*R*/ : + return 'CD'; + } + break; + } + } + return x; +} + +// This map is generated by //flutter/tools/gen_locale.dart +// Mappings generated for language subtag registry as of 2019-02-27. +// static const Map _deprecatedLanguageSubtagMap = { +// 'in': 'id', // Indonesian; deprecated 1989-01-01 +// 'iw': 'he', // Hebrew; deprecated 1989-01-01 +// 'ji': 'yi', // Yiddish; deprecated 1989-01-01 +// 'jw': 'jv', // Javanese; deprecated 2001-08-13 +// 'mo': 'ro', // Moldavian, Moldovan; deprecated 2008-11-22 +// 'aam': 'aas', // Aramanik; deprecated 2015-02-12 +// 'adp': 'dz', // Adap; deprecated 2015-02-12 +// 'aue': 'ktz', // ǂKxʼauǁʼein; deprecated 2015-02-12 +// 'ayx': 'nun', // Ayi (China); deprecated 2011-08-16 +// 'bgm': 'bcg', // Baga Mboteni; deprecated 2016-05-30 +// 'bjd': 'drl', // Bandjigali; deprecated 2012-08-12 +// 'ccq': 'rki', // Chaungtha; deprecated 2012-08-12 +// 'cjr': 'mom', // Chorotega; deprecated 2010-03-11 +// 'cka': 'cmr', // Khumi Awa Chin; deprecated 2012-08-12 +// 'cmk': 'xch', // Chimakum; deprecated 2010-03-11 +// 'coy': 'pij', // Coyaima; deprecated 2016-05-30 +// 'cqu': 'quh', // Chilean Quechua; deprecated 2016-05-30 +// 'drh': 'khk', // Darkhat; deprecated 2010-03-11 +// 'drw': 'prs', // Darwazi; deprecated 2010-03-11 +// 'gav': 'dev', // Gabutamon; deprecated 2010-03-11 +// 'gfx': 'vaj', // Mangetti Dune ǃXung; deprecated 2015-02-12 +// 'ggn': 'gvr', // Eastern Gurung; deprecated 2016-05-30 +// 'gti': 'nyc', // Gbati-ri; deprecated 2015-02-12 +// 'guv': 'duz', // Gey; deprecated 2016-05-30 +// 'hrr': 'jal', // Horuru; deprecated 2012-08-12 +// 'ibi': 'opa', // Ibilo; deprecated 2012-08-12 +// 'ilw': 'gal', // Talur; deprecated 2013-09-10 +// 'jeg': 'oyb', // Jeng; deprecated 2017-02-23 +// 'kgc': 'tdf', // Kasseng; deprecated 2016-05-30 +// 'kgh': 'kml', // Upper Tanudan Kalinga; deprecated 2012-08-12 +// 'koj': 'kwv', // Sara Dunjo; deprecated 2015-02-12 +// 'krm': 'bmf', // Krim; deprecated 2017-02-23 +// 'ktr': 'dtp', // Kota Marudu Tinagas; deprecated 2016-05-30 +// 'kvs': 'gdj', // Kunggara; deprecated 2016-05-30 +// 'kwq': 'yam', // Kwak; deprecated 2015-02-12 +// 'kxe': 'tvd', // Kakihum; deprecated 2015-02-12 +// 'kzj': 'dtp', // Coastal Kadazan; deprecated 2016-05-30 +// 'kzt': 'dtp', // Tambunan Dusun; deprecated 2016-05-30 +// 'lii': 'raq', // Lingkhim; deprecated 2015-02-12 +// 'lmm': 'rmx', // Lamam; deprecated 2014-02-28 +// 'meg': 'cir', // Mea; deprecated 2013-09-10 +// 'mst': 'mry', // Cataelano Mandaya; deprecated 2010-03-11 +// 'mwj': 'vaj', // Maligo; deprecated 2015-02-12 +// 'myt': 'mry', // Sangab Mandaya; deprecated 2010-03-11 +// 'nad': 'xny', // Nijadali; deprecated 2016-05-30 +// 'ncp': 'kdz', // Ndaktup; deprecated 2018-03-08 +// 'nnx': 'ngv', // Ngong; deprecated 2015-02-12 +// 'nts': 'pij', // Natagaimas; deprecated 2016-05-30 +// 'oun': 'vaj', // ǃOǃung; deprecated 2015-02-12 +// 'pcr': 'adx', // Panang; deprecated 2013-09-10 +// 'pmc': 'huw', // Palumata; deprecated 2016-05-30 +// 'pmu': 'phr', // Mirpur Panjabi; deprecated 2015-02-12 +// 'ppa': 'bfy', // Pao; deprecated 2016-05-30 +// 'ppr': 'lcq', // Piru; deprecated 2013-09-10 +// 'pry': 'prt', // Pray 3; deprecated 2016-05-30 +// 'puz': 'pub', // Purum Naga; deprecated 2014-02-28 +// 'sca': 'hle', // Sansu; deprecated 2012-08-12 +// 'skk': 'oyb', // Sok; deprecated 2017-02-23 +// 'tdu': 'dtp', // Tempasuk Dusun; deprecated 2016-05-30 +// 'thc': 'tpo', // Tai Hang Tong; deprecated 2016-05-30 +// 'thx': 'oyb', // The; deprecated 2015-02-12 +// 'tie': 'ras', // Tingal; deprecated 2011-08-16 +// 'tkk': 'twm', // Takpa; deprecated 2011-08-16 +// 'tlw': 'weo', // South Wemale; deprecated 2012-08-12 +// 'tmp': 'tyj', // Tai Mène; deprecated 2016-05-30 +// 'tne': 'kak', // Tinoc Kallahan; deprecated 2016-05-30 +// 'tnf': 'prs', // Tangshewi; deprecated 2010-03-11 +// 'tsf': 'taj', // Southwestern Tamang; deprecated 2015-02-12 +// 'uok': 'ema', // Uokha; deprecated 2015-02-12 +// 'xba': 'cax', // Kamba (Brazil); deprecated 2016-05-30 +// 'xia': 'acn', // Xiandao; deprecated 2013-09-10 +// 'xkh': 'waw', // Karahawyana; deprecated 2016-05-30 +// 'xsj': 'suj', // Subi; deprecated 2015-02-12 +// 'ybd': 'rki', // Yangbye; deprecated 2012-08-12 +// 'yma': 'lrr', // Yamphe; deprecated 2012-08-12 +// 'ymt': 'mtm', // Mator-Taygi-Karagas; deprecated 2015-02-12 +// 'yos': 'zom', // Yos; deprecated 2013-09-10 +// 'yuu': 'yug', // Yugh; deprecated 2014-02-28 +// }; + +// This jump table function is 2x faster than a Map and is generated by: +// https://gist.github.com/gaaclarke/533d5948ec242defb408eec1ce04c55f +String _deprecatedLanguageSubtagMap(String x) { + final List units = x.codeUnits; + if (units.length == 2) { + switch (units[0]) { + case 105 /*i*/ : + { + switch (units[1]) { + case 110 /*n*/ : + return 'id'; + case 119 /*w*/ : + return 'he'; + } + break; + } + case 106 /*j*/ : + { + switch (units[1]) { + case 105 /*i*/ : + return 'yi'; + case 119 /*w*/ : + return 'jv'; + } + break; + } + case 109 /*m*/ : + { + switch (units[1]) { + case 111 /*o*/ : + return 'ro'; + } + break; + } + } + } else if (units.length == 3) { + switch (units[0]) { + case 97 /*a*/ : + { + switch (units[1]) { + case 97 /*a*/ : + { + switch (units[2]) { + case 109 /*m*/ : + return 'aas'; + } + break; + } + case 100 /*d*/ : + { + switch (units[2]) { + case 112 /*p*/ : + return 'dz'; + } + break; + } + case 117 /*u*/ : + { + switch (units[2]) { + case 101 /*e*/ : + return 'ktz'; + } + break; + } + case 121 /*y*/ : + { + switch (units[2]) { + case 120 /*x*/ : + return 'nun'; + } + break; + } + } + break; + } + case 98 /*b*/ : + { + switch (units[1]) { + case 103 /*g*/ : + { + switch (units[2]) { + case 109 /*m*/ : + return 'bcg'; + } + break; + } + case 106 /*j*/ : + { + switch (units[2]) { + case 100 /*d*/ : + return 'drl'; + } + break; + } + } + break; + } + case 99 /*c*/ : + { + switch (units[1]) { + case 99 /*c*/ : + { + switch (units[2]) { + case 113 /*q*/ : + return 'rki'; + } + break; + } + case 106 /*j*/ : + { + switch (units[2]) { + case 114 /*r*/ : + return 'mom'; + } + break; + } + case 107 /*k*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'cmr'; + } + break; + } + case 109 /*m*/ : + { + switch (units[2]) { + case 107 /*k*/ : + return 'xch'; + } + break; + } + case 111 /*o*/ : + { + switch (units[2]) { + case 121 /*y*/ : + return 'pij'; + } + break; + } + case 113 /*q*/ : + { + switch (units[2]) { + case 117 /*u*/ : + return 'quh'; + } + break; + } + } + break; + } + case 100 /*d*/ : + { + switch (units[1]) { + case 114 /*r*/ : + { + switch (units[2]) { + case 104 /*h*/ : + return 'khk'; + case 119 /*w*/ : + return 'prs'; + } + break; + } + } + break; + } + case 103 /*g*/ : + { + switch (units[1]) { + case 97 /*a*/ : + { + switch (units[2]) { + case 118 /*v*/ : + return 'dev'; + } + break; + } + case 102 /*f*/ : + { + switch (units[2]) { + case 120 /*x*/ : + return 'vaj'; + } + break; + } + case 103 /*g*/ : + { + switch (units[2]) { + case 110 /*n*/ : + return 'gvr'; + } + break; + } + case 116 /*t*/ : + { + switch (units[2]) { + case 105 /*i*/ : + return 'nyc'; + } + break; + } + case 117 /*u*/ : + { + switch (units[2]) { + case 118 /*v*/ : + return 'duz'; + } + break; + } + } + break; + } + case 104 /*h*/ : + { + switch (units[1]) { + case 114 /*r*/ : + { + switch (units[2]) { + case 114 /*r*/ : + return 'jal'; + } + break; + } + } + break; + } + case 105 /*i*/ : + { + switch (units[1]) { + case 98 /*b*/ : + { + switch (units[2]) { + case 105 /*i*/ : + return 'opa'; + } + break; + } + case 108 /*l*/ : + { + switch (units[2]) { + case 119 /*w*/ : + return 'gal'; + } + break; + } + } + break; + } + case 106 /*j*/ : + { + switch (units[1]) { + case 101 /*e*/ : + { + switch (units[2]) { + case 103 /*g*/ : + return 'oyb'; + } + break; + } + } + break; + } + case 107 /*k*/ : + { + switch (units[1]) { + case 103 /*g*/ : + { + switch (units[2]) { + case 99 /*c*/ : + return 'tdf'; + case 104 /*h*/ : + return 'kml'; + } + break; + } + case 111 /*o*/ : + { + switch (units[2]) { + case 106 /*j*/ : + return 'kwv'; + } + break; + } + case 114 /*r*/ : + { + switch (units[2]) { + case 109 /*m*/ : + return 'bmf'; + } + break; + } + case 116 /*t*/ : + { + switch (units[2]) { + case 114 /*r*/ : + return 'dtp'; + } + break; + } + case 118 /*v*/ : + { + switch (units[2]) { + case 115 /*s*/ : + return 'gdj'; + } + break; + } + case 119 /*w*/ : + { + switch (units[2]) { + case 113 /*q*/ : + return 'yam'; + } + break; + } + case 120 /*x*/ : + { + switch (units[2]) { + case 101 /*e*/ : + return 'tvd'; + } + break; + } + case 122 /*z*/ : + { + switch (units[2]) { + case 106 /*j*/ : + return 'dtp'; + case 116 /*t*/ : + return 'dtp'; + } + break; + } + } + break; + } + case 108 /*l*/ : + { + switch (units[1]) { + case 105 /*i*/ : + { + switch (units[2]) { + case 105 /*i*/ : + return 'raq'; + } + break; + } + case 109 /*m*/ : + { + switch (units[2]) { + case 109 /*m*/ : + return 'rmx'; + } + break; + } + } + break; + } + case 109 /*m*/ : + { + switch (units[1]) { + case 101 /*e*/ : + { + switch (units[2]) { + case 103 /*g*/ : + return 'cir'; + } + break; + } + case 115 /*s*/ : + { + switch (units[2]) { + case 116 /*t*/ : + return 'mry'; + } + break; + } + case 119 /*w*/ : + { + switch (units[2]) { + case 106 /*j*/ : + return 'vaj'; + } + break; + } + case 121 /*y*/ : + { + switch (units[2]) { + case 116 /*t*/ : + return 'mry'; + } + break; + } + } + break; + } + case 110 /*n*/ : + { + switch (units[1]) { + case 97 /*a*/ : + { + switch (units[2]) { + case 100 /*d*/ : + return 'xny'; + } + break; + } + case 99 /*c*/ : + { + switch (units[2]) { + case 112 /*p*/ : + return 'kdz'; + } + break; + } + case 110 /*n*/ : + { + switch (units[2]) { + case 120 /*x*/ : + return 'ngv'; + } + break; + } + case 116 /*t*/ : + { + switch (units[2]) { + case 115 /*s*/ : + return 'pij'; + } + break; + } + } + break; + } + case 111 /*o*/ : + { + switch (units[1]) { + case 117 /*u*/ : + { + switch (units[2]) { + case 110 /*n*/ : + return 'vaj'; + } + break; + } + } + break; + } + case 112 /*p*/ : + { + switch (units[1]) { + case 99 /*c*/ : + { + switch (units[2]) { + case 114 /*r*/ : + return 'adx'; + } + break; + } + case 109 /*m*/ : + { + switch (units[2]) { + case 99 /*c*/ : + return 'huw'; + case 117 /*u*/ : + return 'phr'; + } + break; + } + case 112 /*p*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'bfy'; + case 114 /*r*/ : + return 'lcq'; + } + break; + } + case 114 /*r*/ : + { + switch (units[2]) { + case 121 /*y*/ : + return 'prt'; + } + break; + } + case 117 /*u*/ : + { + switch (units[2]) { + case 122 /*z*/ : + return 'pub'; + } + break; + } + } + break; + } + case 115 /*s*/ : + { + switch (units[1]) { + case 99 /*c*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'hle'; + } + break; + } + case 107 /*k*/ : + { + switch (units[2]) { + case 107 /*k*/ : + return 'oyb'; + } + break; + } + } + break; + } + case 116 /*t*/ : + { + switch (units[1]) { + case 100 /*d*/ : + { + switch (units[2]) { + case 117 /*u*/ : + return 'dtp'; + } + break; + } + case 104 /*h*/ : + { + switch (units[2]) { + case 99 /*c*/ : + return 'tpo'; + case 120 /*x*/ : + return 'oyb'; + } + break; + } + case 105 /*i*/ : + { + switch (units[2]) { + case 101 /*e*/ : + return 'ras'; + } + break; + } + case 107 /*k*/ : + { + switch (units[2]) { + case 107 /*k*/ : + return 'twm'; + } + break; + } + case 108 /*l*/ : + { + switch (units[2]) { + case 119 /*w*/ : + return 'weo'; + } + break; + } + case 109 /*m*/ : + { + switch (units[2]) { + case 112 /*p*/ : + return 'tyj'; + } + break; + } + case 110 /*n*/ : + { + switch (units[2]) { + case 101 /*e*/ : + return 'kak'; + case 102 /*f*/ : + return 'prs'; + } + break; + } + case 115 /*s*/ : + { + switch (units[2]) { + case 102 /*f*/ : + return 'taj'; + } + break; + } + } + break; + } + case 117 /*u*/ : + { + switch (units[1]) { + case 111 /*o*/ : + { + switch (units[2]) { + case 107 /*k*/ : + return 'ema'; + } + break; + } + } + break; + } + case 120 /*x*/ : + { + switch (units[1]) { + case 98 /*b*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'cax'; + } + break; + } + case 105 /*i*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'acn'; + } + break; + } + case 107 /*k*/ : + { + switch (units[2]) { + case 104 /*h*/ : + return 'waw'; + } + break; + } + case 115 /*s*/ : + { + switch (units[2]) { + case 106 /*j*/ : + return 'suj'; + } + break; + } + } + break; + } + case 121 /*y*/ : + { + switch (units[1]) { + case 98 /*b*/ : + { + switch (units[2]) { + case 100 /*d*/ : + return 'rki'; + } + break; + } + case 109 /*m*/ : + { + switch (units[2]) { + case 97 /*a*/ : + return 'lrr'; + case 116 /*t*/ : + return 'mtm'; + } + break; + } + case 111 /*o*/ : + { + switch (units[2]) { + case 115 /*s*/ : + return 'zom'; + } + break; + } + case 117 /*u*/ : + { + switch (units[2]) { + case 117 /*u*/ : + return 'yug'; + } + break; + } + } + break; + } + } + } + return x; +} + /// An identifier used to select a user's language and formatting preferences. /// /// This represents a [Unicode Language @@ -1879,92 +2725,9 @@ class Locale { /// /// * [Locale.fromSubtags], which describes the conventions for creating /// [Locale] objects. - String get languageCode => _deprecatedLanguageSubtagMap[_languageCode] ?? _languageCode; + String get languageCode => _deprecatedLanguageSubtagMap(_languageCode); final String _languageCode; - // This map is generated by //flutter/tools/gen_locale.dart - // Mappings generated for language subtag registry as of 2019-02-27. - static const Map _deprecatedLanguageSubtagMap = { - 'in': 'id', // Indonesian; deprecated 1989-01-01 - 'iw': 'he', // Hebrew; deprecated 1989-01-01 - 'ji': 'yi', // Yiddish; deprecated 1989-01-01 - 'jw': 'jv', // Javanese; deprecated 2001-08-13 - 'mo': 'ro', // Moldavian, Moldovan; deprecated 2008-11-22 - 'aam': 'aas', // Aramanik; deprecated 2015-02-12 - 'adp': 'dz', // Adap; deprecated 2015-02-12 - 'aue': 'ktz', // ǂKxʼauǁʼein; deprecated 2015-02-12 - 'ayx': 'nun', // Ayi (China); deprecated 2011-08-16 - 'bgm': 'bcg', // Baga Mboteni; deprecated 2016-05-30 - 'bjd': 'drl', // Bandjigali; deprecated 2012-08-12 - 'ccq': 'rki', // Chaungtha; deprecated 2012-08-12 - 'cjr': 'mom', // Chorotega; deprecated 2010-03-11 - 'cka': 'cmr', // Khumi Awa Chin; deprecated 2012-08-12 - 'cmk': 'xch', // Chimakum; deprecated 2010-03-11 - 'coy': 'pij', // Coyaima; deprecated 2016-05-30 - 'cqu': 'quh', // Chilean Quechua; deprecated 2016-05-30 - 'drh': 'khk', // Darkhat; deprecated 2010-03-11 - 'drw': 'prs', // Darwazi; deprecated 2010-03-11 - 'gav': 'dev', // Gabutamon; deprecated 2010-03-11 - 'gfx': 'vaj', // Mangetti Dune ǃXung; deprecated 2015-02-12 - 'ggn': 'gvr', // Eastern Gurung; deprecated 2016-05-30 - 'gti': 'nyc', // Gbati-ri; deprecated 2015-02-12 - 'guv': 'duz', // Gey; deprecated 2016-05-30 - 'hrr': 'jal', // Horuru; deprecated 2012-08-12 - 'ibi': 'opa', // Ibilo; deprecated 2012-08-12 - 'ilw': 'gal', // Talur; deprecated 2013-09-10 - 'jeg': 'oyb', // Jeng; deprecated 2017-02-23 - 'kgc': 'tdf', // Kasseng; deprecated 2016-05-30 - 'kgh': 'kml', // Upper Tanudan Kalinga; deprecated 2012-08-12 - 'koj': 'kwv', // Sara Dunjo; deprecated 2015-02-12 - 'krm': 'bmf', // Krim; deprecated 2017-02-23 - 'ktr': 'dtp', // Kota Marudu Tinagas; deprecated 2016-05-30 - 'kvs': 'gdj', // Kunggara; deprecated 2016-05-30 - 'kwq': 'yam', // Kwak; deprecated 2015-02-12 - 'kxe': 'tvd', // Kakihum; deprecated 2015-02-12 - 'kzj': 'dtp', // Coastal Kadazan; deprecated 2016-05-30 - 'kzt': 'dtp', // Tambunan Dusun; deprecated 2016-05-30 - 'lii': 'raq', // Lingkhim; deprecated 2015-02-12 - 'lmm': 'rmx', // Lamam; deprecated 2014-02-28 - 'meg': 'cir', // Mea; deprecated 2013-09-10 - 'mst': 'mry', // Cataelano Mandaya; deprecated 2010-03-11 - 'mwj': 'vaj', // Maligo; deprecated 2015-02-12 - 'myt': 'mry', // Sangab Mandaya; deprecated 2010-03-11 - 'nad': 'xny', // Nijadali; deprecated 2016-05-30 - 'ncp': 'kdz', // Ndaktup; deprecated 2018-03-08 - 'nnx': 'ngv', // Ngong; deprecated 2015-02-12 - 'nts': 'pij', // Natagaimas; deprecated 2016-05-30 - 'oun': 'vaj', // ǃOǃung; deprecated 2015-02-12 - 'pcr': 'adx', // Panang; deprecated 2013-09-10 - 'pmc': 'huw', // Palumata; deprecated 2016-05-30 - 'pmu': 'phr', // Mirpur Panjabi; deprecated 2015-02-12 - 'ppa': 'bfy', // Pao; deprecated 2016-05-30 - 'ppr': 'lcq', // Piru; deprecated 2013-09-10 - 'pry': 'prt', // Pray 3; deprecated 2016-05-30 - 'puz': 'pub', // Purum Naga; deprecated 2014-02-28 - 'sca': 'hle', // Sansu; deprecated 2012-08-12 - 'skk': 'oyb', // Sok; deprecated 2017-02-23 - 'tdu': 'dtp', // Tempasuk Dusun; deprecated 2016-05-30 - 'thc': 'tpo', // Tai Hang Tong; deprecated 2016-05-30 - 'thx': 'oyb', // The; deprecated 2015-02-12 - 'tie': 'ras', // Tingal; deprecated 2011-08-16 - 'tkk': 'twm', // Takpa; deprecated 2011-08-16 - 'tlw': 'weo', // South Wemale; deprecated 2012-08-12 - 'tmp': 'tyj', // Tai Mène; deprecated 2016-05-30 - 'tne': 'kak', // Tinoc Kallahan; deprecated 2016-05-30 - 'tnf': 'prs', // Tangshewi; deprecated 2010-03-11 - 'tsf': 'taj', // Southwestern Tamang; deprecated 2015-02-12 - 'uok': 'ema', // Uokha; deprecated 2015-02-12 - 'xba': 'cax', // Kamba (Brazil); deprecated 2016-05-30 - 'xia': 'acn', // Xiandao; deprecated 2013-09-10 - 'xkh': 'waw', // Karahawyana; deprecated 2016-05-30 - 'xsj': 'suj', // Subi; deprecated 2015-02-12 - 'ybd': 'rki', // Yangbye; deprecated 2012-08-12 - 'yma': 'lrr', // Yamphe; deprecated 2012-08-12 - 'ymt': 'mtm', // Mator-Taygi-Karagas; deprecated 2015-02-12 - 'yos': 'zom', // Yos; deprecated 2013-09-10 - 'yuu': 'yug', // Yugh; deprecated 2014-02-28 - }; - /// The script subtag for the locale. /// /// This may be null, indicating that there is no specified script subtag. @@ -1998,20 +2761,9 @@ class Locale { /// /// * [Locale.fromSubtags], which describes the conventions for creating /// [Locale] objects. - String? get countryCode => _deprecatedRegionSubtagMap[_countryCode] ?? _countryCode; + String? get countryCode => _countryCode == null ? null : _deprecatedRegionSubtagMap(_countryCode!); final String? _countryCode; - // This map is generated by //flutter/tools/gen_locale.dart - // Mappings generated for language subtag registry as of 2019-02-27. - static const Map _deprecatedRegionSubtagMap = { - 'BU': 'MM', // Burma; deprecated 1989-12-05 - 'DD': 'DE', // German Democratic Republic; deprecated 1990-10-30 - 'FX': 'FR', // Metropolitan France; deprecated 1997-07-14 - 'TP': 'TL', // East Timor; deprecated 2002-05-20 - 'YD': 'YE', // Democratic Yemen; deprecated 1990-08-14 - 'ZR': 'CD', // Zaire; deprecated 1997-07-14 - }; - @override bool operator ==(Object other) { if (identical(this, other)) @@ -2019,13 +2771,20 @@ class Locale { if (other is! Locale) { return false; } - final String? countryCode = _countryCode; + if (scriptCode != other.scriptCode) { + // Prioritize the field with the direct accessor. + // scriptCode cannot be ''; + return false; + } + if (other.languageCode != languageCode) { + // Short circuit to avoid calls to countryCode. + return false; + } + final String? thisCountryCode = countryCode; final String? otherCountryCode = other.countryCode; - return other.languageCode == languageCode - && other.scriptCode == scriptCode // scriptCode cannot be '' - && (other.countryCode == countryCode // Treat '' as equal to null. - || otherCountryCode != null && otherCountryCode.isEmpty && countryCode == null - || countryCode != null && countryCode.isEmpty && other.countryCode == null); + return (other.countryCode == thisCountryCode // Treat '' as equal to null. + || otherCountryCode != null && otherCountryCode.isEmpty && thisCountryCode == null + || thisCountryCode != null && thisCountryCode.isEmpty && other.countryCode == null); } @override