Unlike code_builder, immutable Dart code generation library
code_builder とは違って immutable な Dart のコード生成ライブラリ
- immutable (use fast_immutable_collections)
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());
// 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}, )';
}
}