Vaani/lib/settings/app_settings_provider.dart

59 lines
1.4 KiB
Dart
Raw Normal View History

2024-05-08 05:03:49 -04:00
// this provider is used to provide the app settings to the app
2024-06-28 06:01:56 -04:00
import 'package:logging/logging.dart';
2024-05-08 05:03:49 -04:00
import 'package:riverpod_annotation/riverpod_annotation.dart';
2024-08-23 04:21:46 -04:00
import 'package:vaani/db/available_boxes.dart';
import 'package:vaani/settings/models/app_settings.dart' as model;
2024-05-08 05:03:49 -04:00
part 'app_settings_provider.g.dart';
final _box = AvailableHiveBoxes.userPrefsBox;
2024-06-28 06:01:56 -04:00
final _logger = Logger('AppSettingsProvider');
2024-08-20 08:36:39 -04:00
model.AppSettings readFromBoxOrCreate() {
// see if the settings are already in the box
if (_box.isNotEmpty) {
final foundSettings = _box.getAt(0);
_logger.fine('found settings in box: $foundSettings');
return foundSettings;
} else {
// create a new settings object
const settings = model.AppSettings();
_logger.fine('created new settings: $settings');
return settings;
}
}
2024-06-06 15:35:30 -04:00
@Riverpod(keepAlive: true)
2024-05-08 05:03:49 -04:00
class AppSettings extends _$AppSettings {
@override
model.AppSettings build() {
state = readFromBoxOrCreate();
ref.listenSelf((_, __) {
writeToBox();
});
return state;
}
// write the settings to the box
void writeToBox() {
_box.clear();
_box.add(state);
2024-06-28 06:01:56 -04:00
_logger.fine('wrote settings to box: $state');
2024-05-08 05:03:49 -04:00
}
void toggleDarkMode() {
state = state.copyWith
.themeSettings(isDarkMode: !state.themeSettings.isDarkMode);
2024-05-08 05:03:49 -04:00
}
void updateState(model.AppSettings newSettings) {
state = newSettings;
}
2024-08-20 08:36:39 -04:00
void reset() {
state = const model.AppSettings();
}
2024-05-08 05:03:49 -04:00
}