make<T> static method

T make<T>({
  1. Map<String, dynamic>? overrides,
  2. List<String>? states,
})

Create a single instance of type T.

overrides can be used to override specific attributes. states can be used to apply predefined state modifications.

Example:

final user = NyFactory.make<User>();
final admin = NyFactory.make<User>(
  overrides: {'role': 'admin'},
  states: ['verified'],
);

Implementation

static T make<T>({Map<String, dynamic>? overrides, List<String>? states}) {
  assert(
    _definitions.containsKey(T),
    'No factory defined for type $T. Call NyFactory.define<$T>() first.',
  );

  final definition = _definitions[T]!;
  final faker = NyFaker();

  T instance;
  if (definition is FactoryDefinitionWithOverrides<T>) {
    instance = definition.builderWithOverrides(faker, overrides ?? {});
  } else if (definition is FactoryDefinition<T>) {
    instance = definition.builder(faker);
    if (overrides != null && instance is Map) {
      (instance as Map).addAll(overrides);
    }
  } else {
    throw Exception('Unknown factory definition type');
  }

  // Apply states
  if (states != null) {
    for (final stateName in states) {
      final key = '${T}_$stateName';
      if (_stateDefinitions.containsKey(key)) {
        final stateModifier = _stateDefinitions[key] as FactoryState<T>;
        instance = stateModifier.modifier(instance, faker);
      }
    }
  }

  return instance;
}