onGenerate method

  1. @override
Future<$BuildOutput> onGenerate(
  1. ArtifactBuilder builder,
  2. ClassElement clazz,
  3. ConstructorElement ctor,
  4. List<FormalParameterElement> params,
  5. BuildStep step,
  6. List<String>? eFields,
)
override

Implementation

@override
Future<$BuildOutput> onGenerate(
  ArtifactBuilder builder,
  ClassElement clazz,
  ConstructorElement ctor,
  List<FormalParameterElement> params,
  BuildStep step,
  List<String>? eFields,
) async {
  StringBuffer buf = StringBuffer();
  List<Uri> importUris = <Uri>[];
  buf.write(
    "  static ${builder.applyDefsF(clazz.name ?? "")} get newInstance=>${builder.applyDefsF(clazz.name ?? "")}(",
  );

  for (FormalParameterElement i in params) {
    if (i.isRequired) {
      if (i.type.nullabilitySuffix == NullabilitySuffix.question) {
        buf.write("${i.name}: null,");
      } else if (i.hasDefaultValue) {
        String defaultCode = builder.defaultValueForParam(i);
        buf.write("${i.name}: $defaultCode,");
      } else if (i.type.isDartCoreBool) {
        buf.write("${i.name}: _F,");
      } else if (i.type.isDartCoreInt || i.type.isDartCoreDouble) {
        buf.write("${i.name}: 0,");
      } else if (i.type.isDartCoreString) {
        buf.write("${i.name}: '',");
      } else if (i.type.isDartCoreIterable || i.type.isDartCoreList) {
        buf.write("${i.name}: [],");
      } else if (i.type.name == "DateTime") {
        buf.write("${i.name}: DateTime.now(),");
      } else if (i.type.isDartCoreEnum ||
          (i.type is InterfaceType &&
              builder.$isEnum(i.type as InterfaceType))) {
        buf.write(
          "${i.name}: ${builder.applyDefsF(i.type.getDisplayString(withNullability: false))}.values.first,",
        );
      } else if (i.type.isDartCoreSet || i.type.isDartCoreMap) {
        buf.write("${i.name}: {},");
      } else {
        buf.write(
          "${i.name}: \$${(i.type.getDisplayString(withNullability: false))}.newInstance,",
        );
      }
    }
  }

  buf.writeln(');');

  return (importUris, buf);
}