getInstance static method

Future<MessageRepository> getInstance({
  1. required String path,
  2. String name = _defaultDatabaseName,
})

Singleton-Getter

Implementation

static Future<MessageRepository> getInstance({
  required final String path,
  String name = _defaultDatabaseName,
}) async {
  if (_instance != null) return _instance!;

  DatabaseFactory factory = databaseFactory;

  // Prüfen, ob wir auf einer Desktop-Plattform sind (ohne Web und Mobile zu gefährden)
  if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
    sqfliteFfiInit();
    factory = databaseFactoryFfi;
  }

  final dbPath = await factory.getDatabasesPath();
  final db = await factory.openDatabase(
    path,
    options: OpenDatabaseOptions(
      version: 1,
      onCreate: (db, version) async {
        await db.execute('''
          CREATE TABLE ${Broadcast.tableName} (
            ${Broadcast.columnUuid} TEXT PRIMARY KEY,
            ${Broadcast.columnEvent} TEXT NOT NULL,
            ${Broadcast.columnChannel} TEXT NOT NULL,
            ${Broadcast.columnClientTimestamp} INTEGER NOT NULL,
            ${Broadcast.columnEncodedPayload} TEXT NOT NULL,
            ${Broadcast.columnStatus} TEXT NOT NULL,
            ${Broadcast.columnClientSignature} TEXT,
            ${Broadcast.columnServertime} INTEGER,
            ${Broadcast.columnSequenceId} INTEGER,
            ${Broadcast.columnServerSignature} TEXT
          )
        ''');
      },
    ),
  );

  _instance = MessageRepository(db);
  return _instance!;
}