Ярлык для генерации стандартных кодов json_serializable (плагин Flutter / Dart) в Android Studio

#android-studio #flutter #dart #auto-generate #json-serializable

#android-studio #flutter #dart #автоматическая генерация #json-сериализуемый

Вопрос:

плагин 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);
}
 

Очевидно, что это лучше сделать также машиной, например, конструктором для этого класса: я просто пишу последнее поле, затем нажимаю alt enter, и Android Studio помещает конструктор для меня.

Кто-нибудь знает, как заставить Android Studio сделать это для json_serializable?

Ответ №1:

Существует расширение кода Visual Studio, называемое генератором класса данных Dart (https://marketplace.visualstudio.com/items?itemName=BendixMa.dart-data-class-generator ), которому можно предоставить либо список конечных полей, либо даже образец файла JSON, и он сгенерирует класс данных в комплекте со многими полезными методами. В нем утверждается:

Генератор может генерировать методы constructor, copyWith, toMap, fromMap, toJSON, FromJSON, toString, operator == и hashCode для класса на основе свойств класса или необработанного JSON.

Если вы на стороне Java, я также вижу: https://plugins.jetbrains.com/plugin/12429-dart-data-class но я с этим не играл.

Комментарии:

1. Что ж, это прекрасное решение, и для Android Studio также есть аналогичные плагины. Но я уже использую плагин json_serializable. Я написал простое решение, которое на данный момент удовлетворяет мои потребности, вы можете увидеть его в моем ответе.

Ответ №2:

Я, наконец, написал этот простой сценарий с живым шаблоном. Вам просто нужно ввести имя файла и список полей. Смотрите 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);
}
 

ДЕМОНСТРАЦИЯ

Что ж, в этом простом решении теперь генерируется упомянутая boiler plate, и это отлично работает для меня, но это действительно очень наивный способ, я не потратил много времени на изучение сценария живого шаблона. Одним из улучшений является то, что он записывает поля в список параметров конструктора вместо того, чтобы делать это вручную. Другой способ — использовать скрипт шаблона файла, который я не изучал, и, возможно, создать файл и поля в диалоговом окне.