flutter无法生成.g.dart序列化文件问题
最近由于公司要求开始学习flutter,踩了一大堆坑来到了生成json序列化文件banner.g.dart。
BannerModel.dart文件内容如下
dart
import 'package:json_annotation/json_annotation.dart';
part 'banner_model.g.dart';
class BannerModelList {
late List<BannerModel?> list;
BannerModelList.fromJson(dynamic json) {
if (json is List) {
list = [];
for (var element in json) {
list.add(BannerModel.fromJson(element));
}
} else {
list = [];
}
}
}
@JsonSerializable()
class BannerModel {
@JsonKey(name: 'desc')
String? desc;
@JsonKey(name: 'id')
int? id;
@JsonKey(name: 'imagePath')
String? imagePath;
@JsonKey(name: 'isVisible')
int? isVisible;
@JsonKey(name: 'order')
int? order;
@JsonKey(name: 'title')
String? title;
@JsonKey(name: 'type')
int? type;
@JsonKey(name: 'url')
String? url;
BannerModel(
{this.desc,
this.id,
this.imagePath,
this.isVisible,
this.order,
this.title,
this.type,
this.url});
factory BannerModel.fromJson(Map<String, dynamic> json) =>
_$BannerModelFromJson(json);
static List<BannerModel> fromList(List<Map<String, dynamic>> list) {
return list.map(BannerModel.fromJson).toList();
}
Map<String, dynamic> toJson() => _$BannerModelToJson(this);
}
且已经在pubspec.yml添加了如下依赖:
name: flutter_app
description: "A new Flutter project."
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: '>=3.2.3 <4.0.0'
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
dio: ^5.3.4 # http请求
json_annotation: ^4.9.0 # json解析
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
build_runner: ^2.1.8
json_serializable: ^6.1.5
flutter:
uses-material-design: true
运行flutter packages pub run build_runner build输出成功

但是model文件夹内却没有.g.dart文件!!!

经过排查后发现原来是文件名没有与使用@JsonSerializable类名对上!!!修改文件名banner_modal.dart为banner_model.dart后可正常执行命令生成。


总结:
1.要能使用flutter packages pub run build_runner build正常生成.g.dart文件需要在pubspec.yml文件配置三个依赖
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
dio: ^5.3.4 # http请求
json_annotation: ^4.9.0 # json解析,一定要放在dependencies里否则无法正常生成.g.dart文件!!!
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
build_runner: ^2.1.8 # 用于生成.g.dart
json_serializable: ^6.1.5 # 用于生成.g.dart
2.文件名称需要和内部使用@JsonSerializable注解的类名对应上!!!
浙公网安备 33010602011771号