Flutter中Localizations.localeOf(context)的countryCode始终为null求助
解决Flutter中Localizations.localeOf获取countryCode为null的问题
调用Localizations.localeOf(context)能正常返回languageCode,但countryCode始终为null,通常是以下几种原因导致,对应解决方法如下:
App初始化Locale未包含国家代码
如果在MaterialApp或CupertinoApp的supportedLocales、locale参数中只指定了语言代码(如Locale('zh')),未添加国家代码后缀,那么获取到的Locale自然没有countryCode。需修改为带国家代码的Locale配置:MaterialApp( supportedLocales: const [ Locale('zh', 'CN'), Locale('en', 'US'), ], locale: const Locale('zh', 'CN'), // 可选,指定默认Locale // 其他配置项 )系统Locale本身无国家代码
部分设备的系统语言设置仅选择了语言,未绑定具体国家/地区,此时Localizations.localeOf会返回仅含languageCode的Locale。可以在App内增加地区选择功能,让用户手动指定,或者默认补全国家代码。自定义LocalizationsDelegate未处理完整Locale
若使用了自定义的LocalizationsDelegate,需确保isSupported和load方法能正确识别带国家代码的Locale,避免仅判断languageCode而忽略countryCode:class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> { const AppLocalizationsDelegate(); @override bool isSupported(Locale locale) { // 支持对应语言下的所有国家代码变体 return ['zh', 'en'].contains(locale.languageCode); } @override Future<AppLocalizations> load(Locale locale) { // 根据完整Locale加载对应资源 return SynchronousFuture<AppLocalizations>(AppLocalizations(locale)); } @override bool shouldReload(AppLocalizationsDelegate old) => false; }强制覆盖Locale时未传入国家代码
使用Localizations.override强制设置Locale时,必须传入包含国家代码的Locale实例:Localizations.override( context: context, locale: const Locale('zh', 'CN'), child: const TargetWidget(), )
内容的提问来源于stack exchange,提问作者Vasudev
相关产品推荐
相关产品推荐

