如何在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
相关产品推荐
相关产品推荐

