mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-02-17 23:09:36 +00:00
一堆乱七八糟的修改
播放页面增加桌面版
This commit is contained in:
parent
aee1fbde88
commit
3ba35b31b8
116 changed files with 1238 additions and 2592 deletions
73
lib/features/settings/app_settings_provider.dart
Normal file
73
lib/features/settings/app_settings_provider.dart
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
// this provider is used to provide the app settings to the app
|
||||
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:vaani/db/available_boxes.dart';
|
||||
import 'package:vaani/features/settings/models/app_settings.dart' as model;
|
||||
|
||||
part 'app_settings_provider.g.dart';
|
||||
|
||||
final _box = AvailableHiveBoxes.userPrefsBox;
|
||||
|
||||
final _logger = Logger('AppSettingsProvider');
|
||||
|
||||
model.AppSettings loadOrCreateAppSettings() {
|
||||
// see if the settings are already in the box
|
||||
model.AppSettings? settings;
|
||||
if (_box.isNotEmpty) {
|
||||
try {
|
||||
settings = _box.getAt(0);
|
||||
_logger.fine('found settings in box: $settings');
|
||||
} catch (e) {
|
||||
_logger.warning('error reading settings from box: $e'
|
||||
'\nclearing box');
|
||||
_box.clear();
|
||||
}
|
||||
} else {
|
||||
_logger.fine('no settings found in box, creating new settings');
|
||||
}
|
||||
return settings ?? const model.AppSettings();
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class AppSettings extends _$AppSettings {
|
||||
@override
|
||||
model.AppSettings build() {
|
||||
state = loadOrCreateAppSettings();
|
||||
ref.listenSelf((_, __) {
|
||||
writeToBox();
|
||||
});
|
||||
return state;
|
||||
}
|
||||
|
||||
// write the settings to the box
|
||||
void writeToBox() {
|
||||
_box.clear();
|
||||
_box.add(state);
|
||||
_logger.fine('wrote settings to box: $state');
|
||||
}
|
||||
|
||||
void update(model.AppSettings newSettings) {
|
||||
state = newSettings;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
state = const model.AppSettings();
|
||||
}
|
||||
}
|
||||
|
||||
// SleepTimerSettings provider but only rebuilds when the sleep timer settings change
|
||||
@Riverpod(keepAlive: true)
|
||||
class SleepTimerSettings extends _$SleepTimerSettings {
|
||||
@override
|
||||
model.SleepTimerSettings build() {
|
||||
final settings = ref.read(appSettingsProvider).sleepTimerSettings;
|
||||
state = settings;
|
||||
ref.listen(appSettingsProvider, (a, b) {
|
||||
if (a?.sleepTimerSettings != b.sleepTimerSettings) {
|
||||
state = b.sleepTimerSettings;
|
||||
}
|
||||
});
|
||||
return state;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue