refactor(volumeProvider): use notifier and kvstore for persistence

This commit is contained in:
Kingkor Roy Tirtho 2024-06-17 18:13:41 +06:00
parent b9b7d5c8aa
commit 5936f08a92
2 changed files with 14 additions and 19 deletions

View File

@ -2,31 +2,22 @@ import 'dart:async';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/utils/persisted_state_notifier.dart';
import 'package:spotube/services/kv_store/kv_store.dart';
class VolumeProvider extends PersistedStateNotifier<double> {
VolumeProvider() : super(1, 'volume');
class VolumeProvider extends Notifier<double> {
VolumeProvider();
@override
build() {
return KVStoreService.volume;
}
Future<void> setVolume(double volume) async {
state = volume;
await audioPlayer.setVolume(volume);
}
@override
FutureOr<void> onInit() async {
await audioPlayer.setVolume(state);
}
@override
FutureOr<double> fromJson(Map<String, dynamic> json) {
return json['volume'] as double? ?? 0.0;
}
@override
Map<String, dynamic> toJson() {
return {'volume': state};
KVStoreService.setVolume(volume);
}
}
final volumeProvider =
StateNotifierProvider<VolumeProvider, double>((ref) => VolumeProvider());
NotifierProvider<VolumeProvider, double>(() => VolumeProvider());

View File

@ -78,4 +78,8 @@ abstract class KVStoreService {
static Future<void> setIVKey(IV iv) async {
await sharedPreferences.setString('iv', iv.base64);
}
static double get volume => sharedPreferences.getDouble('volume') ?? 1.0;
static Future<void> setVolume(double value) async =>
await sharedPreferences.setDouble('volume', value);
}