Flutter Freezed是否自带toMap()方法?若无该如何添加?
解决Freezed下Company类缺失toMap()方法的问题
要在Freezed生成的Company类中实现toMap() -> Map<String, String>,可以按照以下步骤修改代码:
1. 配置依赖
确保pubspec.yaml中已添加Freezed相关依赖:
dependencies: freezed_annotation: ^2.4.1 json_annotation: ^4.9.0 dev_dependencies: build_runner: ^2.4.8 freezed: ^2.4.7 json_serializable: ^6.8.0
2. 重构Company类为Freezed格式
替换原类代码为以下结构,同时添加自定义的toMap扩展方法:
import 'package:freezed_annotation/freezed_annotation.dart'; part 'company.freezed.dart'; part 'company.g.dart'; @freezed class Company with _$Company { const factory Company({ String? id, String? name, }) = _Company; // 集成Freezed自动生成的JSON序列化 factory Company.fromJson(Map<String, dynamic> json) => _$CompanyFromJson(json); } // 添加扩展方法实现toMap转换 extension CompanyMapExtension on Company { Map<String, String> toMap() { // 注意:原代码使用!强制解包,若id/name为null会触发异常 // 建议添加null处理,比如给默认空字符串: return { 'id': id ?? '', 'name': name ?? '', }; // 若要保持原代码的强制解包逻辑,可改成: // return { // 'id': id!, // 'name': name!, // }; } }
3. 生成代码
在终端运行以下命令生成Freezed相关代码:
flutter pub run build_runner build # 或使用watch模式实时更新代码: # flutter pub run build_runner watch
使用方式
现在你可以直接调用Company对象的toMap()方法:
final company = Company(id: '1', name: 'Tech Corp'); Map<String, String> companyMap = company.toMap();
内容的提问来源于stack exchange,提问作者Nashaf
相关产品推荐
相关产品推荐

