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输出成功
image

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

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

总结:
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注解的类名对应上!!!

posted @ 2025-08-19 10:00  1awa  阅读(54)  评论(0)    收藏  举报