make<T> static method
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;
}