50 lines
1.3 KiB
Dart
50 lines
1.3 KiB
Dart
import 'package:drift/drift.dart';
|
|
|
|
import '../database/app_database.dart';
|
|
import '../models/settings.dart';
|
|
|
|
abstract class SettingsService {
|
|
Future<AppSettings> getSettings();
|
|
|
|
Future<void> saveSettings(AppSettings settings);
|
|
}
|
|
|
|
class DriftSettingsService implements SettingsService {
|
|
final AppDatabase database;
|
|
static const _settingsId = 'app_settings';
|
|
|
|
DriftSettingsService({required this.database});
|
|
|
|
AppSettings _mapRowToSettings(AppSettingsRow row) {
|
|
return AppSettings(
|
|
pinRequired: row.pinRequired,
|
|
themeMode: AppThemeMode.values.firstWhere(
|
|
(mode) => mode.name == row.themeMode,
|
|
orElse: () => AppThemeMode.system,
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Future<AppSettings> getSettings() async {
|
|
final query = database.select(database.appSettingsTable)
|
|
..where((s) => s.id.equals(_settingsId));
|
|
|
|
final row = await query.getSingleOrNull();
|
|
|
|
if (row == null) return AppSettings.defaults;
|
|
|
|
return _mapRowToSettings(row);
|
|
}
|
|
|
|
@override
|
|
Future<void> saveSettings(AppSettings settings) async {
|
|
await database.into(database.appSettingsTable).insertOnConflictUpdate(
|
|
AppSettingsTableCompanion.insert(
|
|
id: _settingsId,
|
|
pinRequired: Value(settings.pinRequired),
|
|
themeMode: Value(settings.themeMode.name),
|
|
),
|
|
);
|
|
}
|
|
} |