added theme setting; fixed light theme issues

This commit is contained in:
Fabian Freund
2024-06-20 14:15:16 +02:00
parent db84e43e0a
commit 98e9705f1e
9 changed files with 114 additions and 18 deletions
@@ -1,6 +1,7 @@
import 'package:bang_navigator/features/content_block/data/models/host.dart';
import 'package:bang_navigator/features/settings/data/models/settings.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -9,6 +10,22 @@ part 'settings_repository.g.dart';
typedef UpdateSettingsFunc = Settings Function(Settings currentSettings);
Set<HostSource>? _parseHostSources(List<String>? input) => input
?.map(
(list) =>
HostSource.values.firstWhereOrNull((source) => source.name == list),
)
.whereNotNull()
.toSet();
ThemeMode? _parseThemeMode(int? index) {
if (index != null && index < ThemeMode.values.length) {
return ThemeMode.values[index];
}
return null;
}
@Riverpod(keepAlive: true)
class SettingsRepository extends _$SettingsRepository {
static const _sessionStorageKey = 'b4ng_kagi_session';
@@ -18,6 +35,7 @@ class SettingsRepository extends _$SettingsRepository {
static const _launchExternalStorageKey = 'b4ng_settings_launch_external';
static const _contentBlockingStorageKey = 'b4ng_settings_content_blocking';
static const _enableHostListStorageKey = 'b4ng_settings_host_lists';
static const _themeModeStorageKey = 'b4ng_settings_theme_mode';
final FlutterSecureStorage _flutterSecureStorage;
final Future<SharedPreferences> _sharedPreferences;
@@ -88,6 +106,13 @@ class SettingsRepository extends _$SettingsRepository {
);
}
if (newSettings.themeMode != oldSettings.themeMode) {
await sharedPreferences.setInt(
_themeModeStorageKey,
newSettings.themeMode.index,
);
}
ref.invalidateSelf();
}
}
@@ -105,14 +130,11 @@ class SettingsRepository extends _$SettingsRepository {
launchUrlExternal: sharedPreferences.getBool(_launchExternalStorageKey),
enableContentBlocking:
sharedPreferences.getBool(_contentBlockingStorageKey),
enableHostList: sharedPreferences
.getStringList(_enableHostListStorageKey)
?.map(
(list) => HostSource.values
.firstWhereOrNull((source) => source.name == list),
)
.whereNotNull()
.toSet(),
enableHostList: _parseHostSources(
sharedPreferences.getStringList(_enableHostListStorageKey),
),
themeMode:
_parseThemeMode(sharedPreferences.getInt(_themeModeStorageKey)),
);
}
}
@@ -7,7 +7,7 @@ part of 'settings_repository.dart';
// **************************************************************************
String _$settingsRepositoryHash() =>
r'9d0e8b8452f85ca33b8f13a4bbcb69212e7d29bd';
r'2fed76bdc3132729f1018f8e4c9d493ee11831a0';
/// See also [SettingsRepository].
@ProviderFor(SettingsRepository)