build_runner的使用
1、在根目录运行
2、一次性创建.g.dart文件 使用build 此时目录内不能有.g.dart文件
3、watch是监听 有model类的文件创建 自动创建.g.dart文件
flutter packages pub run build_runner build
flutter packages pub run build_runner watch
dependencies:
flutter:
sdk: flutter
json_annotation: ^1.2.0 #json_serializable助手
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: ^1.0.0 #创建.g.dart
json_serializable: ^1.5.1 #序列化json
.dart文件
import 'package:json_annotation/json_annotation.dart';
part 'UserInfo.g.dart';
///标志class需要实现json序列化功能
@JsonSerializable()
///创建类Userinfo 继承Object
///里面有两个属性 name和id
class UserInfo extends Object {
String name;
int id;
///通过JsonKey重新定义参数名
@JsonKey(name: "details_id")
int detailsId;
/// 构造函数
UserInfo(this.name, this.id, this.detailsId);
/// _$HomeModelFromJson 这个函数在.g.dart中,命名就是类名+FromJson
/// 直接写就行 报错也没关系 生成.g.dart文件之后就好了
factory UserInfo.fromJson(Map<String, dynamic> json) => _$UserInfoFromJson(json);
}
.g.dart文件
这个文件是build_runner生成的文件
创建完了IDE文件列表看不见,去文件目录里面找。
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'UserInfo.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
UserInfo _$UserInfoFromJson(Map<String, dynamic> json) {
return UserInfo(json['name'] as String, json['id'] as int);
}
Map<String, dynamic> _$UserInfoToJson(UserInfo instance) =>
<String, dynamic>{'name': instance.name, 'id': instance.id};