You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:02:39