Flutter JSON转Dart模型插件json_to_dart_generator的使用
Flutter JSON转Dart模型插件json_to_dart_generator的使用
1. 使用此包作为库
首先,在pubspec.yaml
文件中添加json_to_dart_generator
到依赖项中。
dependencies:
flutter:
sdk: flutter
json_to_dart_generator: any
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: ^2.0.0
json_to_dart_generator: any
然后在你的Dart文件中导入json_to_dart_generator
包:
import 'package:json_to_dart_generator/json_to_dart_generator.dart';
2. 支持类
1. 创建一个名为school.dart
的Dart文件
import 'dart:convert';
import 'package:json_to_dart_generator/json_to_dart_generator.dart';
part 'school.g.dart';
@JsonObject(copyWith: true)
class School {
final String schoolName;
final List<Grade>? gradeList;
School({required this.schoolName, this.gradeList});
factory School.fromJson(Map<String, dynamic> json) => _$SchoolFromJson(json);
Map<String, dynamic> toJson() => _$SchoolToJson(this);
}
@JsonObject(toJsonString: true)
class Grade {
String gradeName;
Grade({required this.gradeName});
factory Grade.fromJson(Map<String, dynamic> json) => _$GradeFromJson(json);
Map<String, dynamic> toJson() => _$GradeToJson(this);
Grade copyWith({String? gradeName}) => _$GradeCopyWith(this, gradeName: gradeName);
}
2. 运行生成器
在终端中运行以下命令以生成school.g.dart
文件:
flutter pub run build_runner build
3. 生成school.g.dart
生成的文件内容如下:
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// JsonToDartGenerator
// **************************************************************************
part of 'school.dart';
School _$SchoolFromJson(Map<String, dynamic> json) => School(
schoolName: json['schoolName']?.toString() ?? '',
gradeList: json['gradeList'] != null
? DecodeHelper.toList<Map>(json['gradeList'])
.map((e) => Grade.fromJson(Map<String, dynamic>.from(e)))
.toList()
: null,
);
Map<String, dynamic> _$SchoolToJson(School school) {
return {
'schoolName': school.schoolName,
'gradeList': school.gradeList?.cast<Grade>(),
};
}
School _$SchoolCopyWith(
School school, {
String? schoolName,
List<Grade>? gradeList,
}) {
return School(
schoolName: schoolName ?? school.schoolName,
gradeList: gradeList ?? school.gradeList,
);
}
Grade _$GradeFromJson(Map<String, dynamic> json) => Grade(
gradeName: json['gradeName']?.toString() ?? '',
);
Map<String, dynamic> _$GradeToJson(Grade grade) {
return {
'gradeName': grade.gradeName,
};
}
Grade _$GradeCopyWith(
Grade grade, {
String? gradeName,
}) {
return Grade(
gradeName: gradeName ?? grade.gradeName,
);
}
String _$GradeToJsonString(Grade grade) {
return json.encode(_$GradeToJson(grade));
}
3. 支持枚举
1. 创建一个名为gender.dart
的Dart文件
import 'dart:convert';
import 'package:json_to_dart_generator/json_to_dart_generator.dart';
part 'gender.enum.dart';
@JsonEnum()
enum Gender {
@EnumValue('1', text: '女', code: 101)
female,
@EnumValue('2', text: '男', code: 201)
male,
@EnumValue('0', text: '未知', code: 301)
none,
}
extension GenderValues on Gender {
String get text => _$getTextForGender(this)!;
String get value => _$getValueForGender(this)!;
}
2. 运行生成器
再次在终端中运行以下命令以生成gender.enum.dart
文件:
flutter pub run build_runner build
3. 生成gender.enum.dart
生成的文件内容如下:
// GENERATED CODE - DO NOT MODIFY BY HAND
// **************************************************************************
// JsonEnumGenerator
// **************************************************************************
part of 'gender.dart';
// **************************************************************************
// Gender
// **************************************************************************
const _$GenderEnumMap = {
'1': {'enum': Gender.female, 'text': '女', 'code': 101},
'2': {'enum': Gender.male, 'text': '男', 'code': 201},
'0': {'enum': Gender.none, 'text': '未知', 'code': 301},
};
String? _$getTextForGender(Gender that) {
for (dynamic key in _$GenderEnumMap.keys) {
Map<String, dynamic> enumInfo = _$GenderEnumMap[key]!;
if (enumInfo['enum'] == that) {
return enumInfo['text'];
}
}
return null;
}
int? _$getCodeForGender(Gender that) {
for (dynamic key in _$GenderEnumMap.keys) {
Map<String, dynamic> enumInfo = _$GenderEnumMap[key]!;
if (enumInfo['enum'] == that) {
return enumInfo['code'];
}
}
return null;
}
dynamic _$getValueForGender(Gender that) {
for (dynamic key in _$GenderEnumMap.keys) {
Map<String, dynamic> enumInfo = _$GenderEnumMap[key]!;
if (enumInfo['enum'] == that) {
return key;
}
}
return null;
}
Gender _$getGenderWithNonnull(dynamic value, {required Object defaultValue}) {
assert(value is String || value is int);
assert(defaultValue is String || defaultValue is int);
final enumInfo = _$GenderEnumMap[value] ?? _$GenderEnumMap[defaultValue];
assert(enumInfo != null);
return enumInfo!['enum'] as Gender;
}
Gender? _$getGender(dynamic value, {Object? defaultValue}) {
assert(value is String || value is int);
var enumInfo = _$GenderEnumMap[value];
if (enumInfo == null && defaultValue != null) {
assert(defaultValue is String || defaultValue is int);
enumInfo = _$GenderEnumMap[defaultValue];
}
return enumInfo?['enum'] as Gender?;
}
更多关于Flutter JSON转Dart模型插件json_to_dart_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter JSON转Dart模型插件json_to_dart_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
json_to_dart_generator
是一个用于在 Flutter 中自动生成 Dart 数据模型类的插件。它可以帮助你快速将 JSON 数据转换为 Dart 类,从而简化处理 JSON 数据的过程。
安装 json_to_dart_generator
首先,你需要在 pubspec.yaml
文件中添加 json_to_dart_generator
和 build_runner
作为开发依赖:
dev_dependencies:
build_runner: ^2.1.0
json_to_dart_generator: ^1.1.0
然后运行 flutter pub get
来安装依赖。
使用 json_to_dart_generator
- 创建 JSON 文件:首先,你需要有一个包含 JSON 数据的文件。例如,
data.json
:
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"isActive": true
}
- 创建 Dart 文件:在你的 Flutter 项目中创建一个 Dart 文件,例如
user_model.dart
,并添加以下代码:
import 'package:json_annotation/json_annotation.dart';
part 'user_model.g.dart';
@JsonSerializable()
class UserModel {
final String name;
final int age;
final String email;
final bool isActive;
UserModel({
required this.name,
required this.age,
required this.email,
required this.isActive,
});
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
Map<String, dynamic> toJson() => _$UserModelToJson(this);
}
- 生成 Dart 模型类:运行以下命令来生成模型类:
flutter pub run build_runner build
这将会生成 user_model.g.dart
文件,其中包含了自动生成的 fromJson
和 toJson
方法。
- 使用生成的类:现在你可以在你的 Flutter 项目中使用生成的
UserModel
类了。例如:
import 'dart:convert';
import 'user_model.dart';
void main() {
final jsonString = '''
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com",
"isActive": true
}
''';
final jsonMap = jsonDecode(jsonString);
final user = UserModel.fromJson(jsonMap);
print('Name: ${user.name}');
print('Age: ${user.age}');
print('Email: ${user.email}');
print('Is Active: ${user.isActive}');
final userJson = user.toJson();
print('User JSON: $userJson');
}