call method

Future<void> call(
  1. List<DatabaseSeeder Function(OrmConnection)> factories
)

Call other seeders

Useful for composing seeders and managing dependencies.

Example:

@override
Future<void> run() async {
  await call([UserSeeder.new, PostSeeder.new]);
}

Implementation

Future<void> call(
  List<DatabaseSeeder Function(OrmConnection)> factories,
) async {
  final bus = _bus();
  for (var i = 0; i < factories.length; i++) {
    final factory = factories[i];
    final seeder = factory(connection);
    seeder.attachEventBus(bus);
    final name = seeder.runtimeType.toString();
    final stopwatch = Stopwatch()..start();

    bus.emit(
      SeederStartedEvent(
        seederName: name,
        index: i + 1,
        total: factories.length,
      ),
    );

    try {
      await seeder.run();
      stopwatch.stop();
      bus.emit(
        SeederCompletedEvent(seederName: name, duration: stopwatch.elapsed),
      );
    } catch (error, stackTrace) {
      stopwatch.stop();
      bus.emit(
        SeederFailedEvent(
          seederName: name,
          error: error,
          stackTrace: stackTrace,
        ),
      );
      rethrow;
    }
  }
}