mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-21 14:29:12 +00:00
Save settings on shared preferences
This commit is contained in:
parent
3eaf7143f2
commit
794b690c91
7 changed files with 242 additions and 465 deletions
|
@ -10,6 +10,7 @@ import 'package:dynamic_color/dynamic_color.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||||
import 'package:store_checker/store_checker.dart';
|
import 'package:store_checker/store_checker.dart';
|
||||||
import 'package:window_size/window_size.dart';
|
import 'package:window_size/window_size.dart';
|
||||||
|
@ -31,8 +32,8 @@ import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||||
import 'package:adguard_home_manager/constants/colors.dart';
|
import 'package:adguard_home_manager/constants/colors.dart';
|
||||||
import 'package:adguard_home_manager/config/globals.dart';
|
import 'package:adguard_home_manager/config/globals.dart';
|
||||||
import 'package:adguard_home_manager/config/theme.dart';
|
import 'package:adguard_home_manager/config/theme.dart';
|
||||||
import 'package:adguard_home_manager/classes/http_override.dart';
|
|
||||||
import 'package:adguard_home_manager/services/db/database.dart';
|
import 'package:adguard_home_manager/services/db/database.dart';
|
||||||
|
import 'package:adguard_home_manager/classes/http_override.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
@ -49,7 +50,11 @@ void main() async {
|
||||||
|
|
||||||
await dotenv.load(fileName: '.env');
|
await dotenv.load(fileName: '.env');
|
||||||
|
|
||||||
final AppConfigProvider appConfigProvider = AppConfigProvider();
|
final sharedPreferences = await SharedPreferences.getInstance();
|
||||||
|
|
||||||
|
final AppConfigProvider appConfigProvider = AppConfigProvider(
|
||||||
|
sharedPreferencesInstance: sharedPreferences
|
||||||
|
);
|
||||||
final ServersProvider serversProvider = ServersProvider();
|
final ServersProvider serversProvider = ServersProvider();
|
||||||
final StatusProvider statusProvider = StatusProvider();
|
final StatusProvider statusProvider = StatusProvider();
|
||||||
final ClientsProvider clientsProvider = ClientsProvider();
|
final ClientsProvider clientsProvider = ClientsProvider();
|
||||||
|
@ -69,9 +74,7 @@ void main() async {
|
||||||
appConfigProvider.setIosInfo(iosInfo);
|
appConfigProvider.setIosInfo(iosInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
final dbData = await loadDb(appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31);
|
if (sharedPreferences.getBool('overrideSslCheck') == true) {
|
||||||
|
|
||||||
if (dbData['appConfig']['overrideSslCheck'] == 1) {
|
|
||||||
HttpOverrides.global = MyHttpOverrides();
|
HttpOverrides.global = MyHttpOverrides();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,10 +83,12 @@ void main() async {
|
||||||
appConfigProvider.setInstallationSource(installationSource);
|
appConfigProvider.setInstallationSource(installationSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final dbData = await loadDb();
|
||||||
serversProvider.setDbInstance(dbData['dbInstance']);
|
serversProvider.setDbInstance(dbData['dbInstance']);
|
||||||
appConfigProvider.saveFromDb(dbData['dbInstance'], dbData['appConfig']);
|
|
||||||
serversProvider.saveFromDb(dbData['servers']);
|
serversProvider.saveFromDb(dbData['servers']);
|
||||||
|
|
||||||
|
appConfigProvider.saveFromSharedPreferences();
|
||||||
|
|
||||||
PackageInfo appInfo = await PackageInfo.fromPlatform();
|
PackageInfo appInfo = await PackageInfo.fromPlatform();
|
||||||
appConfigProvider.setAppInfo(appInfo);
|
appConfigProvider.setAppInfo(appInfo);
|
||||||
|
|
||||||
|
@ -208,14 +213,16 @@ class _MainState extends State<Main> {
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
return DynamicColorBuilder(
|
return DynamicColorBuilder(
|
||||||
builder: (lightDynamic, darkDynamic) => MaterialApp(
|
builder: (lightDynamic, darkDynamic) {
|
||||||
|
appConfigProvider.setSupportsDynamicTheme(lightDynamic != null && darkDynamic != null);
|
||||||
|
return MaterialApp(
|
||||||
title: 'AdGuard Home Manager',
|
title: 'AdGuard Home Manager',
|
||||||
theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
|
theme: lightDynamic != null
|
||||||
? appConfigProvider.useDynamicColor == true
|
? appConfigProvider.useDynamicColor == true
|
||||||
? lightTheme(lightDynamic)
|
? lightTheme(lightDynamic)
|
||||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor])
|
: lightThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||||
: lightThemeOldVersions(colors[appConfigProvider.staticColor]),
|
: lightThemeOldVersions(colors[appConfigProvider.staticColor]),
|
||||||
darkTheme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
|
darkTheme: darkDynamic != null
|
||||||
? appConfigProvider.useDynamicColor == true
|
? appConfigProvider.useDynamicColor == true
|
||||||
? darkTheme(darkDynamic)
|
? darkTheme(darkDynamic)
|
||||||
: darkThemeOldVersions(colors[appConfigProvider.staticColor])
|
: darkThemeOldVersions(colors[appConfigProvider.staticColor])
|
||||||
|
@ -243,7 +250,8 @@ class _MainState extends State<Main> {
|
||||||
child: child!,
|
child: child!,
|
||||||
),
|
),
|
||||||
home: const Layout(),
|
home: const Layout(),
|
||||||
),
|
);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,22 +1,23 @@
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:store_checker/store_checker.dart';
|
import 'package:store_checker/store_checker.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:sqflite/sqlite_api.dart';
|
|
||||||
|
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
||||||
import 'package:adguard_home_manager/models/github_release.dart';
|
import 'package:adguard_home_manager/models/github_release.dart';
|
||||||
import 'package:adguard_home_manager/services/db/queries.dart';
|
|
||||||
import 'package:adguard_home_manager/functions/conversions.dart';
|
|
||||||
import 'package:adguard_home_manager/models/app_log.dart';
|
import 'package:adguard_home_manager/models/app_log.dart';
|
||||||
|
|
||||||
class AppConfigProvider with ChangeNotifier {
|
class AppConfigProvider with ChangeNotifier {
|
||||||
Database? _dbInstance;
|
final SharedPreferences sharedPreferencesInstance;
|
||||||
|
|
||||||
|
AppConfigProvider({
|
||||||
|
required this.sharedPreferencesInstance
|
||||||
|
});
|
||||||
|
|
||||||
PackageInfo? _appInfo;
|
PackageInfo? _appInfo;
|
||||||
AndroidDeviceInfo? _androidDeviceInfo;
|
AndroidDeviceInfo? _androidDeviceInfo;
|
||||||
|
@ -28,6 +29,7 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
|
|
||||||
bool _showingSnackbar = false;
|
bool _showingSnackbar = false;
|
||||||
|
|
||||||
|
bool _supportsDynamicTheme = true;
|
||||||
int _selectedTheme = 0;
|
int _selectedTheme = 0;
|
||||||
bool _useDynamicColor = true;
|
bool _useDynamicColor = true;
|
||||||
int _staticColor = 0;
|
int _staticColor = 0;
|
||||||
|
@ -38,19 +40,19 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
|
|
||||||
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
|
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
|
||||||
|
|
||||||
int _hideServerAddress = 0;
|
bool _hideServerAddress = false;
|
||||||
|
|
||||||
final List<AppLog> _logs = [];
|
final List<AppLog> _logs = [];
|
||||||
|
|
||||||
int _overrideSslCheck = 0;
|
bool _overrideSslCheck = false;
|
||||||
|
|
||||||
int _hideZeroValues = 0;
|
bool _hideZeroValues = false;
|
||||||
|
|
||||||
int _showTimeLogs = 0;
|
bool _showTimeLogs = false;
|
||||||
|
|
||||||
int _showIpLogs = 0;
|
bool _showIpLogs = false;
|
||||||
|
|
||||||
int _combinedChartHome = 0;
|
bool _combinedChartHome = false;
|
||||||
|
|
||||||
String? _doNotRememberVersion;
|
String? _doNotRememberVersion;
|
||||||
|
|
||||||
|
@ -88,6 +90,10 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get supportsDynamicTheme {
|
||||||
|
return _supportsDynamicTheme;
|
||||||
|
}
|
||||||
|
|
||||||
int get selectedThemeNumber {
|
int get selectedThemeNumber {
|
||||||
return _selectedTheme;
|
return _selectedTheme;
|
||||||
}
|
}
|
||||||
|
@ -105,11 +111,11 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get overrideSslCheck {
|
bool get overrideSslCheck {
|
||||||
return _overrideSslCheck == 1 ? true : false;
|
return _overrideSslCheck;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get hideZeroValues {
|
bool get hideZeroValues {
|
||||||
return _hideZeroValues == 1 ? true : false;
|
return _hideZeroValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get selectedScreen {
|
int get selectedScreen {
|
||||||
|
@ -133,15 +139,15 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get showTimeLogs {
|
bool get showTimeLogs {
|
||||||
return _showTimeLogs == 1 ? true : false;
|
return _showTimeLogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get showIpLogs {
|
bool get showIpLogs {
|
||||||
return _showIpLogs == 1 ? true : false;
|
return _showIpLogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get combinedChartHome {
|
bool get combinedChartHome {
|
||||||
return _combinedChartHome == 1 ? true : false;
|
return _combinedChartHome;
|
||||||
}
|
}
|
||||||
|
|
||||||
String? get doNotRememberVersion {
|
String? get doNotRememberVersion {
|
||||||
|
@ -165,11 +171,11 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get hideServerAddress {
|
bool get hideServerAddress {
|
||||||
return _hideServerAddress == 1 ? true : false;
|
return _hideServerAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDbInstance(Database db) {
|
void setSupportsDynamicTheme(bool value) {
|
||||||
_dbInstance = db;
|
_supportsDynamicTheme = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setAppInfo(PackageInfo appInfo) {
|
void setAppInfo(PackageInfo appInfo) {
|
||||||
|
@ -227,206 +233,145 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setOverrideSslCheck(bool status) async {
|
Future<bool> setOverrideSslCheck(bool status) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('overrideSslCheck', status);
|
||||||
column: 'overrideSslCheck',
|
_overrideSslCheck = status;
|
||||||
value: status == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_overrideSslCheck = status == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setHideZeroValues(bool status) async {
|
Future<bool> setHideZeroValues(bool status) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('hideZeroValues', status);
|
||||||
column: 'hideZeroValues',
|
_hideZeroValues = status;
|
||||||
value: status == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_hideZeroValues = status == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setshowTimeLogs(bool status) async {
|
Future<bool> setshowTimeLogs(bool status) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('showTimeLogs', status);
|
||||||
column: 'showTimeLogs',
|
_showTimeLogs = status;
|
||||||
value: status == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_showTimeLogs = status == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setShowIpLogs(bool status) async {
|
Future<bool> setShowIpLogs(bool status) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('showIpLogs', status);
|
||||||
column: 'showIpLogs',
|
_showIpLogs = status;
|
||||||
value: status == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_showIpLogs = status == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setSelectedTheme(int value) async {
|
Future<bool> setSelectedTheme(int value) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setInt('selectedTheme', value);
|
||||||
column: 'theme',
|
|
||||||
value: value
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_selectedTheme = value;
|
_selectedTheme = value;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setUseDynamicColor(bool value) async {
|
Future<bool> setUseDynamicColor(bool value) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('useDynamicColor', value);
|
||||||
column: 'useDynamicColor',
|
|
||||||
value: value == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_useDynamicColor = value;
|
_useDynamicColor = value;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<bool> setUseThemeColorForStatus(bool value) async {
|
|
||||||
final updated = await updateConfigQuery(
|
|
||||||
db: _dbInstance!,
|
|
||||||
column: 'useThemeColorForStatus',
|
|
||||||
value: value == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_useThemeColorForStatus = value;
|
|
||||||
notifyListeners();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setCombinedChartHome(bool value) async {
|
Future<bool> setCombinedChartHome(bool value) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('combinedChart', value);
|
||||||
column: 'combinedChart',
|
_combinedChartHome = value;
|
||||||
value: value == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_combinedChartHome = value == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setStaticColor(int value) async {
|
Future<bool> setStaticColor(int value) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setInt('staticColor', value);
|
||||||
column: 'staticColor',
|
|
||||||
value: value
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_staticColor = value;
|
_staticColor = value;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> order) async {
|
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> order) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setStringList('homeTopItemsOrder', List<String>.from(order.map((e) => e.name)));
|
||||||
column: 'homeTopItemsOrder',
|
|
||||||
value: jsonEncode(List<String>.from(order.map((e) => e.name)))
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_homeTopItemsOrder = order;
|
_homeTopItemsOrder = order;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setHideServerAddress(bool value) async {
|
Future<bool> setHideServerAddress(bool value) async {
|
||||||
final updated = await updateConfigQuery(
|
try {
|
||||||
db: _dbInstance!,
|
sharedPreferencesInstance.setBool('hideServerAddress', value);
|
||||||
column: 'hideServerAddress',
|
_hideServerAddress = value;
|
||||||
value: value == true ? 1 : 0
|
|
||||||
);
|
|
||||||
if (updated == true) {
|
|
||||||
_hideServerAddress = value == true ? 1 : 0;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (e, stackTrace) {
|
||||||
else {
|
Sentry.captureException(e, stackTrace: stackTrace);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setDoNotRememberVersion(String value) async {
|
Future<bool> setDoNotRememberVersion(String value) async {
|
||||||
final updated = await updateConfigQuery(
|
final updated = await sharedPreferencesInstance.setString('hideServerAddress', value);
|
||||||
db: _dbInstance!,
|
|
||||||
column: 'doNotRememberVersion',
|
|
||||||
value: value
|
|
||||||
);
|
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveFromDb(Database dbInstance, Map<String, dynamic> dbData) {
|
void saveFromSharedPreferences() {
|
||||||
_selectedTheme = dbData['theme'] ?? 0;
|
_selectedTheme = sharedPreferencesInstance.getInt('selectedTheme') ?? 0;
|
||||||
_overrideSslCheck = dbData['overrideSslCheck'] ?? 0;
|
_overrideSslCheck = sharedPreferencesInstance.getBool('overrideSslCheck') ?? false;
|
||||||
_hideZeroValues = dbData['hideZeroValues'];
|
_hideZeroValues = sharedPreferencesInstance.getBool('hideZeroValues') ?? false;
|
||||||
_useDynamicColor = convertFromIntToBool(dbData['useDynamicColor'])!;
|
_useDynamicColor = sharedPreferencesInstance.getBool('useDynamicColor') ?? true;
|
||||||
_staticColor = dbData['staticColor'] ?? 0;
|
_staticColor = sharedPreferencesInstance.getInt('staticColor') ?? 0;
|
||||||
_useThemeColorForStatus = dbData['useThemeColorForStatus'] != null ? convertFromIntToBool(dbData['useThemeColorForStatus'])! : false;
|
_showTimeLogs = sharedPreferencesInstance.getBool('showTimeLogs') ?? false;
|
||||||
_showTimeLogs = dbData['showTimeLogs'] ?? 0;
|
_doNotRememberVersion = sharedPreferencesInstance.getString('doNotRememberVersion');
|
||||||
_doNotRememberVersion = dbData['doNotRememberVersion'];
|
_showIpLogs = sharedPreferencesInstance.getBool('showIpLogs') ?? false;
|
||||||
_showIpLogs = dbData['showIpLogs'] ?? 0;
|
_combinedChartHome = sharedPreferencesInstance.getBool('combinedChart') ?? false;
|
||||||
_combinedChartHome = dbData['combinedChart'] ?? 0;
|
_hideServerAddress = sharedPreferencesInstance.getBool('hideServerAddress') ?? false;
|
||||||
_hideServerAddress = dbData['hideServerAddress'];
|
if (sharedPreferencesInstance.getStringList('homeTopItemsOrder') != null) {
|
||||||
if (dbData['homeTopItemsOrder'] != null) {
|
|
||||||
try {
|
try {
|
||||||
final itemsOrder = List<HomeTopItems>.from(
|
final itemsOrder = List<HomeTopItems>.from(
|
||||||
List<String>.from(jsonDecode(dbData['homeTopItemsOrder'])).map((e) {
|
List<String>.from(sharedPreferencesInstance.getStringList('homeTopItemsOrder')!).map((e) {
|
||||||
switch (e) {
|
switch (e) {
|
||||||
case 'queriedDomains':
|
case 'queriedDomains':
|
||||||
return HomeTopItems.queriedDomains;
|
return HomeTopItems.queriedDomains;
|
||||||
|
@ -458,8 +403,5 @@ class AppConfigProvider with ChangeNotifier {
|
||||||
_homeTopItemsOrder = homeTopItemsDefaultOrder;
|
_homeTopItemsOrder = homeTopItemsDefaultOrder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_dbInstance = dbInstance;
|
|
||||||
notifyListeners();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -120,7 +120,7 @@ class _CustomizationWidgetState extends State<CustomizationWidget> {
|
||||||
label: AppLocalizations.of(context)!.color,
|
label: AppLocalizations.of(context)!.color,
|
||||||
padding: const EdgeInsets.only(top: 45, left: 16, right: 16, bottom: 5),
|
padding: const EdgeInsets.only(top: 45, left: 16, right: 16, bottom: 5),
|
||||||
),
|
),
|
||||||
if (appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31) CustomSwitchListTile(
|
if (appConfigProvider.supportsDynamicTheme) CustomSwitchListTile(
|
||||||
value: dynamicColor,
|
value: dynamicColor,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() => dynamicColor = value);
|
setState(() => dynamicColor = value);
|
||||||
|
@ -129,7 +129,10 @@ class _CustomizationWidgetState extends State<CustomizationWidget> {
|
||||||
title: AppLocalizations.of(context)!.useDynamicTheme,
|
title: AppLocalizations.of(context)!.useDynamicTheme,
|
||||||
),
|
),
|
||||||
if (!(appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31)) const SizedBox(height: 20),
|
if (!(appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31)) const SizedBox(height: 20),
|
||||||
if (dynamicColor == false) Padding(
|
if (
|
||||||
|
appConfigProvider.supportsDynamicTheme == false ||
|
||||||
|
(appConfigProvider.supportsDynamicTheme == true && dynamicColor == false)
|
||||||
|
) Padding(
|
||||||
padding: const EdgeInsets.only(bottom: 8, left: 16, right: 16),
|
padding: const EdgeInsets.only(bottom: 8, left: 16, right: 16),
|
||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
controller: _colorsScrollController,
|
controller: _colorsScrollController,
|
||||||
|
@ -207,15 +210,6 @@ class _CustomizationWidgetState extends State<CustomizationWidget> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
CustomSwitchListTile(
|
|
||||||
value: useThemeColorInsteadGreenRed,
|
|
||||||
onChanged: (value) {
|
|
||||||
setState(() => useThemeColorInsteadGreenRed = value);
|
|
||||||
appConfigProvider.setUseThemeColorForStatus(value);
|
|
||||||
},
|
|
||||||
title: AppLocalizations.of(context)!.useThemeColorStatus,
|
|
||||||
subtitle: AppLocalizations.of(context)!.useThemeColorStatusDescription,
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -1,141 +1,7 @@
|
||||||
import 'package:sqflite/sqflite.dart';
|
import 'package:sqflite/sqflite.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
Future<Map<String, dynamic>> loadDb() async {
|
||||||
|
|
||||||
Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
|
||||||
List<Map<String, Object?>>? servers;
|
List<Map<String, Object?>>? servers;
|
||||||
List<Map<String, Object?>>? appConfig;
|
|
||||||
|
|
||||||
Future rebuildAppConfig(Database db) async {
|
|
||||||
await db.execute("DROP TABLE appConfig");
|
|
||||||
await db.execute("CREATE TABLE appConfig (theme NUMERIC, overrideSslCheck NUMERIC, hideZeroValues NUMERIC, useDynamicColor NUMERIC, staticColor NUMERIC, useThemeColorForStatus NUMERIC, showTimeLogs NUMERIC, showIpLogs NUMERIC, combinedChart NUMERIC, doNotRememberVersion TEXT)");
|
|
||||||
await db.execute("INSERT INTO appConfig (theme, overrideSslCheck, hideZeroValues, useDynamicColor, staticColor, useThemeColorForStatus, showTimeLogs, showIpLogs, combinedChart) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0)");
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV2(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN overrideSslCheck NUMERIC");
|
|
||||||
await db.execute("UPDATE appConfig SET overrideSslCheck = 0");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV3(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN hideZeroValues NUMERIC");
|
|
||||||
await db.execute("UPDATE appConfig SET hideZeroValues = 0");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV4(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE servers ADD COLUMN runningOnHa INTEGER");
|
|
||||||
await db.execute("UPDATE servers SET runningOnHa = 0");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM servers',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV5(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN useDynamicColor NUMERIC");
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN staticColor NUMERIC");
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN useThemeColorForStatus NUMERIC");
|
|
||||||
await db.execute("UPDATE appConfig SET useDynamicColor = ${acceptsDynamicTheme == true ? 1 : 0}, staticColor = 0, useThemeColorForStatus = 0");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV6(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN showNameTimeLogs NUMERIC");
|
|
||||||
await db.execute("UPDATE appConfig SET showNameTimeLogs = 0");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV7(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN doNotRememberVersion TEXT");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV8(Database db) async {
|
|
||||||
try {
|
|
||||||
final data = await db.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
await rebuildAppConfig(db);
|
|
||||||
await db.update(
|
|
||||||
'appConfig',
|
|
||||||
{
|
|
||||||
'theme': data[0]['theme'],
|
|
||||||
'overrideSslCheck': data[0]['overrideSslCheck'],
|
|
||||||
'hideZeroValues': data[0]['hideZeroValues'],
|
|
||||||
'useDynamicColor': data[0]['useDynamicColor'],
|
|
||||||
'staticColor': data[0]['staticColor'],
|
|
||||||
'useThemeColorForStatus': data[0]['useThemeColorForStatus'],
|
|
||||||
'showTimeLogs': data[0]['showNameTimeLogs'],
|
|
||||||
'showIpLogs': data[0]['showIpLogs'],
|
|
||||||
'combinedChart': data[0]['combinedChart'],
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
await rebuildAppConfig(db);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV9(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN hideServerAddress NUMERIC");
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN homeTopItemsOrder TEXT");
|
|
||||||
await db.execute("UPDATE appConfig SET hideServerAddress = 0, homeTopItemsOrder = '$homeTopItemsDefaultOrderString'");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV10(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig ADD COLUMN showTopItemsChart NUMERIC");
|
|
||||||
await db.execute("UPDATE appConfig SET showTopItemsChart = 1");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future upgradeDbToV11(Database db) async {
|
|
||||||
await db.execute("ALTER TABLE appConfig DROP COLUMN showTopItemsChart");
|
|
||||||
|
|
||||||
await db.transaction((txn) async{
|
|
||||||
await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Database db = await openDatabase(
|
Database db = await openDatabase(
|
||||||
'adguard_home_manager.db',
|
'adguard_home_manager.db',
|
||||||
|
@ -159,135 +25,9 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
|
|
||||||
await db.execute(
|
|
||||||
"""
|
|
||||||
CREATE TABLE
|
|
||||||
appConfig (
|
|
||||||
theme NUMERIC,
|
|
||||||
overrideSslCheck NUMERIC,
|
|
||||||
hideZeroValues NUMERIC,
|
|
||||||
useDynamicColor NUMERIC,
|
|
||||||
staticColor NUMERIC,
|
|
||||||
useThemeColorForStatus NUMERIC,
|
|
||||||
showTimeLogs NUMERIC,
|
|
||||||
showIpLogs NUMERIC,
|
|
||||||
combinedChart NUMERIC,
|
|
||||||
doNotRememberVersion TEXT,
|
|
||||||
hideServerAddress NUMERIC,
|
|
||||||
homeTopItemsOrder TEXT
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
await db.execute(
|
|
||||||
"""
|
|
||||||
INSERT INTO
|
|
||||||
appConfig (
|
|
||||||
theme,
|
|
||||||
overrideSslCheck,
|
|
||||||
hideZeroValues,
|
|
||||||
useDynamicColor,
|
|
||||||
staticColor,
|
|
||||||
useThemeColorForStatus,
|
|
||||||
showTimeLogs,
|
|
||||||
showIpLogs,
|
|
||||||
combinedChart,
|
|
||||||
hideServerAddress,
|
|
||||||
homeTopItemsOrder
|
|
||||||
)
|
|
||||||
VALUES (
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
${acceptsDynamicTheme == true ? 1 : 0},
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
'$homeTopItemsDefaultOrderString'
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
onUpgrade: (Database db, int oldVersion, int newVersion) async {
|
||||||
if (oldVersion == 1) {
|
|
||||||
await upgradeDbToV2(db);
|
|
||||||
await upgradeDbToV3(db);
|
|
||||||
await upgradeDbToV4(db);
|
|
||||||
await upgradeDbToV5(db);
|
|
||||||
await upgradeDbToV6(db);
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 2) {
|
|
||||||
await upgradeDbToV3(db);
|
|
||||||
await upgradeDbToV4(db);
|
|
||||||
await upgradeDbToV5(db);
|
|
||||||
await upgradeDbToV6(db);
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 3) {
|
|
||||||
await upgradeDbToV4(db);
|
|
||||||
await upgradeDbToV5(db);
|
|
||||||
await upgradeDbToV6(db);
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 4) {
|
|
||||||
await upgradeDbToV5(db);
|
|
||||||
await upgradeDbToV6(db);
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 5) {
|
|
||||||
await upgradeDbToV6(db);
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 6) {
|
|
||||||
await upgradeDbToV7(db);
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 7) {
|
|
||||||
await upgradeDbToV8(db);
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 8) {
|
|
||||||
await upgradeDbToV9(db);
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 9) {
|
|
||||||
await upgradeDbToV10(db);
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
if (oldVersion == 10) {
|
|
||||||
await upgradeDbToV11(db);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
onOpen: (Database db) async {
|
onOpen: (Database db) async {
|
||||||
await db.transaction((txn) async{
|
await db.transaction((txn) async{
|
||||||
|
@ -295,17 +35,11 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
|
||||||
'SELECT * FROM servers',
|
'SELECT * FROM servers',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
await db.transaction((txn) async{
|
|
||||||
appConfig = await txn.rawQuery(
|
|
||||||
'SELECT * FROM appConfig',
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"servers": servers,
|
"servers": servers,
|
||||||
"appConfig": appConfig![0],
|
|
||||||
"dbInstance": db,
|
"dbInstance": db,
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@ import device_info_plus
|
||||||
import dynamic_color
|
import dynamic_color
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
import sentry_flutter
|
import sentry_flutter
|
||||||
|
import shared_preferences_foundation
|
||||||
import sqflite
|
import sqflite
|
||||||
import sqlite3_flutter_libs
|
import sqlite3_flutter_libs
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
@ -19,6 +20,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
||||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
|
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
|
||||||
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
|
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
|
|
96
pubspec.lock
96
pubspec.lock
|
@ -502,6 +502,30 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
|
path_provider_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_linux
|
||||||
|
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
|
path_provider_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_platform_interface
|
||||||
|
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
path_provider_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_windows
|
||||||
|
sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
percent_indicator:
|
percent_indicator:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -526,6 +550,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.4.0"
|
version: "5.4.0"
|
||||||
|
platform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: platform
|
||||||
|
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.4"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -574,6 +606,62 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.15.0"
|
version: "7.15.0"
|
||||||
|
shared_preferences:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: shared_preferences
|
||||||
|
sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.2"
|
||||||
|
shared_preferences_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_android
|
||||||
|
sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
|
shared_preferences_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_foundation
|
||||||
|
sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.5"
|
||||||
|
shared_preferences_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_linux
|
||||||
|
sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
shared_preferences_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_platform_interface
|
||||||
|
sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
shared_preferences_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_web
|
||||||
|
sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.2"
|
||||||
|
shared_preferences_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_windows
|
||||||
|
sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -852,6 +940,14 @@ packages:
|
||||||
url: "https://github.com/google/flutter-desktop-embedding"
|
url: "https://github.com/google/flutter-desktop-embedding"
|
||||||
source: git
|
source: git
|
||||||
version: "0.1.0"
|
version: "0.1.0"
|
||||||
|
xdg_directories:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xdg_directories
|
||||||
|
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.4"
|
||||||
xml:
|
xml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -77,6 +77,7 @@ dependencies:
|
||||||
timezone: ^0.9.2
|
timezone: ^0.9.2
|
||||||
flutter_custom_tabs: ^2.0.0+1
|
flutter_custom_tabs: ^2.0.0+1
|
||||||
url_launcher: ^6.2.4
|
url_launcher: ^6.2.4
|
||||||
|
shared_preferences: ^2.2.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
Loading…
Add table
Reference in a new issue