import 'package:drift/drift.dart'; import '../database/app_database.dart'; import '../models/settings.dart'; abstract class SettingsService { Future getSettings(); Future 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 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 saveSettings(AppSettings settings) async { await database .into(database.appSettingsTable) .insertOnConflictUpdate( AppSettingsTableCompanion.insert( id: _settingsId, pinRequired: Value(settings.pinRequired), themeMode: Value(settings.themeMode.name), ), ); } }