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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:57:38