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

如何在Dart/Flutter中用Freezed自动实现汇率JSON转模型?

用Freezed自动完成汇率JSON到Dart模型的转换

1. 配置依赖

先在pubspec.yaml中添加Freezed及相关JSON序列化依赖:

dependencies:
  flutter:
    sdk: flutter
  freezed_annotation: ^2.4.1
  json_annotation: ^4.8.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.6
  freezed: ^2.4.6
  json_serializable: ^6.7.1

执行flutter pub get安装依赖。

2. 定义Freezed模型

替换你手动编写的ExchangeRatesResponse类,用Freezed注解生成自动序列化逻辑:

import 'package:freezed_annotation/freezed_annotation.dart';

// 必须添加这两行part语句,用于生成代码
part 'exchange_rates_response.freezed.dart';
part 'exchange_rates_response.g.dart';

@freezed
class ExchangeRatesResponse with _$ExchangeRatesResponse {
  // 定义模型字段,和JSON结构一一对应
  const factory ExchangeRatesResponse({
    required String base,
    required String date,
    required Map<String, double> rates,
  }) = _ExchangeRatesResponse;

  // 自动生成的fromJson方法,无需手动实现
  factory ExchangeRatesResponse.fromJson(Map<String, dynamic> json) =>
      _$ExchangeRatesResponseFromJson(json);
}

如果JSON字段和Dart字段名不一致(比如JSON是base_currency),可以用@JsonKey映射:

@JsonKey(name: 'base_currency')
required String base,

3. 生成序列化代码

在终端执行命令生成自动代码:

# 单次生成
flutter pub run build_runner build

# 监听文件变化自动生成(开发时推荐)
flutter pub run build_runner watch

执行后会生成两个文件:exchange_rates_response.freezed.dart和exchange_rates_response.g.dart,里面包含自动生成的fromJson、toJson及Freezed的其他实用方法。

4. 解析JSON示例

替换原来手动解析的逻辑,直接调用生成的fromJson方法:

import 'dart:convert';
import 'exchange_rates_response.dart';

// 示例JSON数据
final jsonString = '''
{
  "base": "USD",
  "date": "2024-05-20",
  "rates": {
    "EUR": 0.92,
    "GBP": 0.79,
    "JPY": 150.50
  }
}
''';

void parseRates() {
  final jsonMap = jsonDecode(jsonString) as Map<String, dynamic>;
  final response = ExchangeRatesResponse.fromJson(jsonMap);

  // 使用解析后的模型数据
  print('基准货币: ${response.base}');
  print('欧元汇率: ${response.rates['EUR']}');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:35