adguard-home-manager/lib/providers/app_config_provider.dart
2022-09-30 01:23:28 +02:00

121 lines
No EOL
2.5 KiB
Dart

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<AppLog> _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<AppLog> 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<bool> setSelectedTheme(int value) async {
final updated = await _updateThemeDb(value);
if (updated == true) {
_selectedTheme = value;
notifyListeners();
return true;
}
else {
return false;
}
}
Future<bool> _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<String, dynamic> dbData) {
_selectedTheme = dbData['theme'];
_dbInstance = dbInstance;
notifyListeners();
}
}