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

Flutter本地化空安全异常:空检查运算符被用于空值

Flutter空安全下本地化报“Null check operator used on a null value”问题解决

问题根源

你的getTranslated方法返回可空的String?,但在_MyAppState.build第77行代码中,你对该方法的返回值使用了!空检查运算符(类似getTranslated(...)!),而此时AppLocalization.of(context)返回了null,直接触发空检查错误。

解决步骤

1. 修复调用处的空处理逻辑

找到main.dart第77行调用getTranslated的代码,将!替换为默认值兜底:

// 错误写法
Text(getTranslated('your_key', context)!)

// 正确写法
Text(getTranslated('your_key', context) ?? '默认文本')

2. 验证AppLocalization初始化配置

确保你的MaterialApp已正确配置本地化代理,示例如下:

MaterialApp(
  localizationsDelegates: [
    AppLocalizations.delegate, // 自定义本地化代理
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  supportedLocales: [
    Locale('en'),
    Locale('zh'), // 项目支持的语言列表
  ],
  // 其他配置项
)

同时确认AppLocalization.of方法实现无误:

static AppLocalization? of(BuildContext context) {
  return Localizations.of<AppLocalization>(context, AppLocalization);
}

3. 优化getTranslated方法(可选)

将方法改为直接返回非空字符串,减少调用方的空处理成本:

String getTranslated(String key, BuildContext context, {String defaultValue = ''}) {
  return AppLocalization.of(context)?.translate(key) ?? defaultValue;
}

4. 确认上下文有效性

确保调用getTranslated时使用的context是MaterialApp内部的上下文。如果在MaterialApp外部(比如MyApp的build方法中直接调用,而MaterialApp是该方法返回的子组件),则无法获取到AppLocalization实例,需将调用逻辑移至MaterialApp的子组件中。


内容的提问来源于stack exchange,提问作者Man Steel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:45:15