如何让Freezed仅生成toJson方法,禁用fromJson方法?
如何让Freezed仅生成toJson方法而跳过fromJson?
当然可以直接让Freezed跳过fromJson的生成,比抛出UnimplementedError的方案更干净,具体可以通过结合json_serializable的注解配置实现:
- 给你的
VoucherRequestRM类添加@JsonSerializable(generateFromJson: false)注解,明确告诉代码生成器不要生成反序列化方法 - 保留Freezed的基础配置,只手动声明
toJson的调用逻辑
示例代码如下:
import 'package:freezed_annotation/freezed_annotation.dart'; part 'voucher_request_rm.freezed.dart'; part 'voucher_request_rm.g.dart'; @freezed @JsonSerializable(generateFromJson: false) class VoucherRequestRM with _$VoucherRequestRM { const factory VoucherRequestRM({ required String voucherCode, required int applyAmount, // 其他业务字段 }) = _VoucherRequestRM; // 仅生成序列化方法 Map<String, dynamic> toJson() => _$VoucherRequestRMToJson(this); }
执行flutter pub run build_runner build后,生成的.g.dart文件里只会包含_$VoucherRequestRMToJson方法,不会出现fromJson相关的代码,完全符合你的需求。
这种方案的优势在于从根源上避免了无用代码的生成,不需要在运行时处理错误,比你之前的方案更高效、更符合代码规范。
内容的提问来源于stack exchange,提问作者zex_rectooor
相关产品推荐
相关产品推荐

