Flutter应用切换库尔德语重启后导航报错:Invalid locale 'en'
我开发的Flutter应用支持英语、阿拉伯语、库尔德语三种语言,切换任意语言时均无异常,但切换至库尔德语并重启应用后,导航至特定页面会触发以下错误:
Invalid argument(s): Invalid locale "en"
我不清楚重启操作对Locale的影响,但该问题导致应用完全无法运行。
我的代理列表代码:
final delegatesList = [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, KuMaterialLocalizations.delegate, KuWidgetLocalizations.delegate, MaterialLocalizationKuDelegate(), ...context.localizationDelegates, ];
我的支持区域设置代码:
startLocale: const Locale("en"), supportedLocales: const [ Locale("en"), Locale("ku"), Locale("ar"), ],
可能的原因及解决办法
Locale持久化与初始化顺序问题
重启后库尔德语Locale可能未被正确加载,导致组件回退到"en"时出错。检查Locale持久化逻辑(比如用SharedPreferences保存选中语言),确保应用启动时优先读取保存的Locale,而非直接使用startLocale。库尔德语本地化代理冲突
你同时添加了KuMaterialLocalizations.delegate、KuWidgetLocalizations.delegate和MaterialLocalizationKuDelegate(),可能存在代理冗余或冲突。尝试只保留一套库尔德语本地化代理,比如移除重复的MaterialLocalizationKuDelegate(),确保每种本地化类型(Material、Widget)仅对应一个库尔德语代理。特定页面硬编码Locale引用
检查报错页面是否存在硬编码的Locale("en")引用,或是初始化组件时强制使用英语Locale。重启后当前Locale为库尔德语,这类硬编码会导致不兼容。库尔德语本地化资源缺失
确认库尔德语的本地化资源文件是否完整,尤其是特定页面用到的字符串、Material组件配置。若组件在库尔德语下找不到对应资源,回退逻辑出错就会触发该错误。
内容的提问来源于stack exchange,提问作者Hama Sabah

