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

非空安全Flutter项目用freezed报参数未加required或@Default错误如何解决

解决方案

1. 优先修复依赖版本不匹配问题

你当前的主依赖和dev依赖里的freezed_annotation版本不一致,这是首要错误,且0.14+版本的freezed默认按空安全逻辑校验,不适配你的非空安全项目。
修改依赖如下:

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  freezed_annotation: ^0.12.0
  # 其他原有依赖保持不变

dev_dependencies:
  freezed: ^0.12.7
  build_runner: ^1.12.2 # 高版本build_runner默认适配空安全,建议降级到1.x版本
  retrofit_generator: ^2.0.1 # 配套非空安全版本
  # 其他原有dev依赖保持不变

上述版本是经过验证的非空安全场景下稳定兼容的版本组合,不会触发空安全相关校验。


2. 若不想降级freezed版本,可修改模型类代码

如果你坚持使用0.14+版本的freezed,可给所有参数加上required关键字,或给参数配置默认值即可解决报错:

方案A:标记参数为必填

import 'package:freezed_annotation/freezed_annotation.dart';

part 'chart_daily_expanded_detailes_model.freezed.dart';

@freezed
abstract class ChartDailyExpandedDetailesModel
    with _$ChartDailyExpandedDetailesModel {
  const factory ChartDailyExpandedDetailesModel({
    required String title,
    required String testNumber,
    required String testPercentage,
    required String icon,
  }) = _ChartDailyExpandedDetailesModel;
}

方案B:给参数设置默认值

import 'package:freezed_annotation/freezed_annotation.dart';

part 'chart_daily_expanded_detailes_model.freezed.dart';

@freezed
abstract class ChartDailyExpandedDetailesModel
    with _$ChartDailyExpandedDetailesModel {
  const factory ChartDailyExpandedDetailesModel({
    @Default('') String title,
    @Default('') String testNumber,
    @Default('') String testPercentage,
    @Default('') String icon,
  }) = _ChartDailyExpandedDetailesModel;
}

3. 重新执行生成命令

修改完成后依次执行以下命令即可正常生成代码:

  • 清理缓存:flutter clean
  • 重新拉取依赖:flutter pub get
  • 生成freezed代码:flutter pub run build_runner build --delete-conflicting-outputs

内容的提问来源于stack exchange,提问作者Cyrus the Great

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:27:01