Flutter中使用Freezed包生成的泛型ApiResult类缺失when和map方法
Flutter中使用Freezed包生成的泛型ApiResult类缺失when和map方法
嘿,我之前也碰到过Freezed生成泛型类时丢失when/map方法的问题,咱们一步步来排查解决:
先确认依赖版本兼容性
有些旧版本的Freezed对泛型密封类的支持存在bug,建议把相关依赖更新到最新稳定版,调整pubspec.yaml:dependencies: freezed_annotation: ^2.4.1 json_annotation: ^4.8.1 dev_dependencies: build_runner: ^2.4.6 freezed: ^2.4.5 json_serializable: ^6.7.1更新后记得执行
flutter pub get拉取新依赖。彻底清理并重新生成代码
旧的生成文件缓存很可能是问题根源,一定要用带清理参数的命令重新生成:flutter pub run build_runner build --delete-conflicting-outputs这个命令会删掉之前生成的冲突文件,确保新生成的代码完全匹配当前的类定义。
调整类定义的写法
你的代码写法本身没问题,但可以试试把sealed换成abstract(Freezed对两种写法都支持,部分场景下abstract更稳妥):import 'package:freezed_annotation/freezed_annotation.dart'; part 'api_result.freezed.dart'; @freezed abstract class ApiResult<T> with _$ApiResult<T> { const factory ApiResult.success(T data) = Success<T>; const factory ApiResult.failure(String msg) = Failure<T>; }查看生成时的控制台日志
运行build_runner命令时,仔细看控制台有没有报错信息,比如语法错误、依赖缺失之类的,这些都可能导致代码生成不完整。
另外,使用的时候要记得明确指定泛型类型,比如:
final result = ApiResult<String>.success("测试数据"); result.when( success: (data) => print("成功:$data"), failure: (msg) => print("失败:$msg"), );
备注:内容来源于stack exchange,提问作者Mohamed Yaseen
相关产品推荐
相关产品推荐

