在 Android Studio 中生成 json_serializable(Flutter/Dart 插件)样板代码的快捷方式

Shortcut for generating json_serializable (Flutter/Dart plugin) boilerplate codes in Android Studio

json_serializable Dart 的插件,在自动生成一些容易出错和繁琐的代码部分方面做得很好,以换取一些样板文件:两种方法,一种注解,一种对生成文件的引用。

import 'package:json_annotation/json_annotation.dart';

part 'location.g.dart';

@JsonSerializable()
class Location {
  final double lat;
  final double lng;

  Location(this.lat, this.lng);

  factory Location.fromJson(Map<String, dynamic> json) =>
       _$LocationFromJson(json);

  Map<String, dynamic> toJson() => _$LocationToJson(this);
}

显然这也最好由机器来完成,比如这个 class 的构造函数:我只写了最后一个字段,然后按 alt+enter 和 Android Studio 为我放置了构造函数.

有人知道如何让 Android Studio 为 json_serializable 做那个吗?

有一个名为 Dart Data Class Generator (https://marketplace.visualstudio.com/items?itemName=BendixMa.dart-data-class-generator) 的 Visual Studio 代码扩展 (https://marketplace.visualstudio.com/items?itemName=BendixMa.dart-data-class-generator),可以为它提供最终字段列表,甚至是示例 JSON文件,它将生成包含许多有用方法的数据 Class。它声称:

The generator can generate the constructor, copyWith, toMap, fromMap, toJson, fromJson, toString, operator == and hashCode methods for a class based on class properties or raw JSON.

如果你站在 Java 一边,我也看到了:https://plugins.jetbrains.com/plugin/12429-dart-data-class 但我还没有玩过。

我终于写出了这个简单的 Live Template 脚本。您只需输入文件名和字段列表。请参阅下面的 gif。

import 'package:json_annotation/json_annotation.dart';

part '$NAME$.g.dart'

@JsonSerializable(explicitToJson: true)
class $CAP_NAME$ {
  $END$
  
  $CAP_NAME$();
  
  factory $CAP_NAME$.fromJson(Map<String, dynamic> json) => _$$$CAP_NAME$FromJson(json);
  
  Map<String, dynamic> toJson() => _$$$CAP_NAME$ToJson(this);
}

好吧,在这个简单的解决方案中,现在正在生成提到的样板,这对我来说很好用,但这确实是一种非常幼稚的方式,我没有投入太多时间来学习 Live Template 脚本。一项改进是让它在构造函数参数列表中写入字段,而不是手动执行。另一种方法是使用我没有研究过的文件模板脚本,并可能在对话框中创建文件和字段。