import 'package:flutter/material.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/scheduler.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:sqflite/sqlite_api.dart'; import 'package:adguard_home_manager/models/app_log.dart'; class AppConfigProvider with ChangeNotifier { Database? _dbInstance; PackageInfo? _appInfo; AndroidDeviceInfo? _androidDeviceInfo; IosDeviceInfo? _iosDeviceInfo; int _selectedTheme = 0; int _selectedClientsTab = 0; final List _logs = []; PackageInfo? get getAppInfo { return _appInfo; } AndroidDeviceInfo? get androidDeviceInfo { return _androidDeviceInfo; } IosDeviceInfo? get iosDeviceInfo { return _iosDeviceInfo; } ThemeMode get selectedTheme { switch (_selectedTheme) { case 0: return SchedulerBinding.instance.window.platformBrightness == Brightness.light ? ThemeMode.light : ThemeMode.dark; case 1: return ThemeMode.light; case 2: return ThemeMode.dark; default: return ThemeMode.light; } } int get selectedThemeNumber { return _selectedTheme; } int get selectedClientsTab { return _selectedClientsTab; } List get logs { return _logs; } void setDbInstance(Database db) { _dbInstance = db; } void setAppInfo(PackageInfo appInfo) { _appInfo = appInfo; } void setAndroidInfo(AndroidDeviceInfo deviceInfo) { _androidDeviceInfo = deviceInfo; } void setIosInfo(IosDeviceInfo deviceInfo) { _iosDeviceInfo = deviceInfo; } void setSelectedClientsTab(int tab) { _selectedClientsTab = tab; notifyListeners(); } void addLog(AppLog log) { _logs.add(log); notifyListeners(); } Future setSelectedTheme(int value) async { final updated = await _updateThemeDb(value); if (updated == true) { _selectedTheme = value; notifyListeners(); return true; } else { return false; } } Future _updateThemeDb(int value) async { try { return await _dbInstance!.transaction((txn) async { await txn.rawUpdate( 'UPDATE appConfig SET theme = $value', ); return true; }); } catch (e) { return false; } } void saveFromDb(Database dbInstance, Map dbData) { _selectedTheme = dbData['theme']; _dbInstance = dbInstance; notifyListeners(); } }