frenda 0.0.3 copy "frenda: ^0.0.3" to clipboard
frenda: ^0.0.3 copied to clipboard

自动生成包含 `toJson`、`fromJson`、`copyWith`、`toString`、`operator ==` 以及 `hashCode` 方法的 Dart 类

Frenda #

pub package

Frenda 是一个旨在提升开发效率的工具,它能够自动生成包含 toJsonfromJsoncopyWithtoStringoperator == 以及 hashCode 方法的 Dart 类。

安装 #

flutter pub add frenda

运行 #

dart run build_runner build --delete-conflicting-outputs

配置 #

  • 在自己的根项目下创建一个 build.yaml 文件,全部配置如下:
targets:
  $default:
    builders:
      frenda:    
        options:
          # 用于标识类的前缀
          prefix: "$"

注解 #

  • @frenda | @Frenda() 用于标注类
  • @filed | @Filed('json序列化的name') 用于标注字段

使用 #

import 'package:frenda/frenda.dart';

/// 必须写part
part 'simple.g.dart';

/// 注解进行标识,类名必须以 $ 开头,如果想要其他开头,需要修改配置
@frenda
class $Simple {
  /// 定义字段
  late String firstField;

  /// 设置默认值
  late final int secondField = 10;

  /// 自定义序列化后的字段名
  @Filed('third_field')
  late bool? thirdField;
}
  • 然后运行生成命令,最终的结果如下:
// dart format width=80
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'simple.dart';

// **************************************************************************
// FrendaGenerator
// **************************************************************************

/// 注解进行标识,类名必须以 $ 开头,如果想要其他开头,需要修改配置
class Simple implements Serializable {
  /// 定义字段
  String firstField;

  /// 设置默认值
  final int secondField;

  /// 自定义序列化后的字段名
  bool? thirdField;

  Simple({required this.firstField, this.secondField = 10, this.thirdField});

  @override
  Map<String, dynamic> toJson() => {
    'firstField': firstField,
    'secondField': secondField,
    'third_field': thirdField,
  };

  factory Simple.fromJson(Map<String, dynamic> json) => Simple(
    firstField: json['firstField'] as String,
    secondField: json['secondField'] as int,
    thirdField: json['third_field'] as bool?,
  );

  Simple copyWith({String? firstField, int? secondField, bool? thirdField}) =>
      Simple(
        firstField: firstField ?? this.firstField,
        secondField: secondField ?? this.secondField,
        thirdField: thirdField ?? this.thirdField,
      );

  @override
  String toString() =>
      'Simple(firstField: $firstField, secondField: $secondField, third_field: $thirdField)';

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
          (other is Simple &&
              runtimeType == other.runtimeType &&
              other.firstField == firstField &&
              other.secondField == secondField &&
              other.thirdField == thirdField);

  @override
  int get hashCode => Object.hash(firstField, secondField, thirdField);
}
  • 使用生成后的类
import 'simple.dart';

void main() {
  final simple = Simple(firstField: 'first');
  print(simple.toString());
  /// output:
  /// Simple(firstField: first, secondField: 10, third_field: null)
}

更多例子 #

simple

3
likes
0
points
15
downloads

Publisher

verified publisherdev.tatakai.top

Weekly Downloads

自动生成包含 `toJson`、`fromJson`、`copyWith`、`toString`、`operator ==` 以及 `hashCode` 方法的 Dart 类

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

analyzer, build, flutter, source_gen

More

Packages that depend on frenda