simple_dart_code_gen 0.6.1 copy "simple_dart_code_gen: ^0.6.1" to clipboard
simple_dart_code_gen: ^0.6.1 copied to clipboard

simple_dart_code_gen

simple_dart_code_gen #

pub package

Unlike code_builder, immutable Dart code generation library

code_builder とは違って immutable な Dart のコード生成ライブラリ

Features #

Usage #

const code = SimpleDartCode(
  importPackageAndFileNames: const IListConst([]),
  declarationList: IList([
    ClassDeclaration(
      name: 'SampleClass',
      documentationComments: 'document',
      fields: IList([
        const Field(
          name: 'name',
          documentationComments: '名前',
          type: wellknown_type.String,
          parameterPattern: ParameterPatternNamed(),
        ),
        Field(
          name: 'age',
          documentationComments: '年齢',
          type: wellknown_type.double.setIsNullable(true),
          parameterPattern: const ParameterPatternNamed(),
        ),
      ]),
      modifier: ClassModifier.final_,
    ),
  ]),
);
print(code.toCodeString());

output #

// Generated by simple_dart_code_gen. Do not edit.
// ignore_for_file: camel_case_types, constant_identifier_names, always_use_package_imports
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
import 'package:meta/meta.dart';

/// document
@immutable
final class SampleClass {
  /// document
  const SampleClass({
    required this.name,
    required this.age,
  });

  /// 名前
  final String name;

  /// 年齢
  final double? age;

  /// `SampleClass` を複製する
  @useResult
  SampleClass copyWith({
    String? name,
    (double?,)? age,
  }) {
    return SampleClass(
      name: (name ?? this.name),
      age: ((age == null) ? this.age : age.$1),
    );
  }

  /// `SampleClass` のフィールドを変更したものを新しく返す
  @useResult
  SampleClass updateFields({
    String Function(String prevName)? name,
    double? Function(double? prevAge)? age,
  }) {
    return SampleClass(
      name: ((name == null) ? this.name : name(this.name)),
      age: ((age == null) ? this.age : age(this.age)),
    );
  }

  @override
  @useResult
  int get hashCode {
    return Object.hash(
      name,
      age,
    );
  }

  @override
  @useResult
  bool operator ==(
    Object other,
  ) {
    return (((other is SampleClass) && (name == other.name)) &&
        (age == other.age));
  }

  @override
  @useResult
  String toString() {
    return 'SampleClass(name: ${name}, age: ${age}, )';
  }
}