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

Flutter中Shared Preferences出现_CastError空值检查错误求助

解决_CastError (Null check operator used on a null value)错误

你的错误根源在于Settings类的构造函数没有将传入的参数赋值给类的成员变量,导致创建Settings对象后,所有属性都是null,调用saveSettings时,settings.programmingLanguages!的空强制解包触发了错误。

具体修复步骤:

1. 修复models.dart中的Settings类

原来的构造函数仅声明了必填参数,但没有把参数赋值给类的属性,修改成以下两种方式之一:

方式一(推荐,符合空安全最佳实践):
将成员变量设为非空final,通过初始化列表直接绑定参数:

enum Gender { FEMALE, MALE, OTHER }

enum ProgrammingLanguage { DART, JAVASCRIPT, KOTLIN, SWIFT }

class Settings {
  final String username;
  final Gender gender;
  final Set<ProgrammingLanguage> programmingLanguages;
  final bool isEmployed;

  Settings({
    required this.username,
    required this.gender,
    required this.programmingLanguages,
    required this.isEmployed,
  });
}

方式二(保留可空成员变量):
手动在构造函数内给成员变量赋值:

enum Gender { FEMALE, MALE, OTHER }

enum ProgrammingLanguage { DART, JAVASCRIPT, KOTLIN, SWIFT }

class Settings {
  String? username;
  Gender? gender;
  Set<ProgrammingLanguage>? programmingLanguages;
  bool? isEmployed;

  Settings({
    required String username,
    required Gender gender,
    required Set<ProgrammingLanguage> programmingLanguages,
    required bool isEmployed,
  }) {
    this.username = username;
    this.gender = gender;
    this.programmingLanguages = programmingLanguages;
    this.isEmployed = isEmployed;
  }
}

2. 调整preferences-service.dart的代码

如果用方式一(非空成员变量),可以去掉空强制解包符!,让代码更安全:

await preferences.setStringList(
  'ProgrammingLanguages',
  settings.programmingLanguages
      .map((lang) => lang.index.toString())
      .toList(),
);

错误原因解释

你创建Settings对象时,虽然传入了username、gender等参数,但原来的构造函数没有把这些值赋给类的属性,导致settings.programmingLanguages实际是null。当你用!强制解包null值时,就会触发Null check operator used on a null value错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:00:56