Files
PinePods-nix/PinePods-0.8.2/mobile/lib/repository/sembast/sembast_database_service.dart
2026-03-03 10:57:43 -05:00

53 lines
1.4 KiB
Dart

// Copyright 2020 Ben Hills and the project contributors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sembast/sembast.dart';
import 'package:sembast/sembast_io.dart';
typedef DatabaseUpgrade = Future<void> Function(Database, int, int);
/// Provides a database instance to other services and handles the opening
/// of the Sembast DB.
class DatabaseService {
Completer<Database>? _databaseCompleter;
String databaseName;
int? version = 1;
DatabaseUpgrade? upgraderCallback;
DatabaseService(
this.databaseName, {
this.version,
this.upgraderCallback,
});
Future<Database> get database async {
if (_databaseCompleter == null) {
_databaseCompleter = Completer();
await _openDatabase();
}
return _databaseCompleter!.future;
}
Future _openDatabase() async {
final appDocumentDir = await getApplicationDocumentsDirectory();
final dbPath = join(appDocumentDir.path, databaseName);
final database = await databaseFactoryIo.openDatabase(
dbPath,
version: version,
onVersionChanged: (db, oldVersion, newVersion) async {
if (upgraderCallback != null) {
await upgraderCallback!(db, oldVersion, newVersion);
}
},
);
_databaseCompleter!.complete(database);
}
}