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

Flutter中Freezed泛型类构建失败问题求助

问题分析与解决方案

错误原因

你遇到的编译错误核心在于泛型类反序列化的工厂方法写法不符合Freezed 2.x的规范,具体问题:

  1. 手动声明的fromJson工厂方法使用了直接调用生成函数的写法(=> _$ApiResponseFromJson(...)),这不符合Freezed对泛型类fromJson的要求,Freezed要求此类工厂必须声明为重定向构造器。
  2. 上述写法触发了Dart语法错误,进而导致Freezed代码生成器无法正常处理你的文件。

修正后的代码

将api_response.dart中的fromJson工厂方法修改为以下形式:

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';

part 'api_response.freezed.dart';
part 'api_response.g.dart';

@Freezed(genericArgumentFactories: true)
class ApiResponse<T> with _$ApiResponse {
  const factory ApiResponse.data(T data) = ApiResponseData;
  const factory ApiResponse.error(String message) = ApiResponseError;

  // 修正后的fromJson工厂方法:重定向到生成的私有类
  factory ApiResponse.fromJson(Map<String, dynamic> json, T Function(Object?) fromJsonT) = _ApiResponse<T>;
}

关键修改点说明

  • 移除了原代码中=> _$ApiResponseFromJson(json, fromJsonT)的写法,替换为重定向构造器= _ApiResponse<T>,这是Freezed 2.x处理泛型类反序列化的标准写法。
  • 保留了genericArgumentFactories: true参数,确保Freezed生成支持泛型参数的反序列化代码。

重新执行构建命令

修改完成后,再次运行构建命令:

flutter pub run build_runner build --delete-conflicting-outputs

额外验证(可选)

如果后续需要使用这个泛型类反序列化具体类型(比如User类),可以这样调用:

final response = ApiResponse<User>.fromJson(
  jsonData,
  (json) => User.fromJson(json as Map<String, dynamic>),
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:09:22