spotube/lib/provider/UserPreferences.dart
Kingkor Roy Tirtho e666e25ffd Global custom hotkey support for playback control
UserPreferences provider genius access token not loading on init bug fix
2022-02-06 10:01:29 +06:00

101 lines
2.5 KiB
Dart

import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:spotube/models/LocalStorageKeys.dart';
class UserPreferences extends ChangeNotifier {
String? geniusAccessToken;
HotKey? nextTrackHotKey;
HotKey? prevTrackHotKey;
HotKey? playPauseHotKey;
UserPreferences({
this.nextTrackHotKey,
this.prevTrackHotKey,
this.playPauseHotKey,
this.geniusAccessToken,
}) {
onInit();
}
Future<HotKey?> _getHotKeyFromLocalStorage(
SharedPreferences preferences, String key) async {
String? str = preferences.getString(key);
if (str != null) {
Map<String, dynamic> json = await jsonDecode(str);
if (json.isEmpty) {
return null;
}
return HotKey.fromJson(json);
}
}
onInit() async {
try {
SharedPreferences localStorage = await SharedPreferences.getInstance();
String? accessToken =
localStorage.getString(LocalStorageKeys.geniusAccessToken);
geniusAccessToken ??= accessToken;
nextTrackHotKey ??= await _getHotKeyFromLocalStorage(
localStorage,
LocalStorageKeys.nextTrackHotKey,
);
prevTrackHotKey ??= await _getHotKeyFromLocalStorage(
localStorage,
LocalStorageKeys.prevTrackHotKey,
);
playPauseHotKey ??= await _getHotKeyFromLocalStorage(
localStorage,
LocalStorageKeys.playPauseHotKey,
);
notifyListeners();
} catch (e, stack) {
print("[UserPreferences.onInit]: $e");
print(stack);
}
}
setGeniusAccessToken(String? token) {
geniusAccessToken = token;
notifyListeners();
}
setNextTrackHotKey(HotKey? value) {
nextTrackHotKey = value;
SharedPreferences.getInstance().then((preferences) {
preferences.setString(
LocalStorageKeys.nextTrackHotKey,
jsonEncode(value?.toJson() ?? {}),
);
});
notifyListeners();
}
setPrevTrackHotKey(HotKey? value) {
prevTrackHotKey = value;
SharedPreferences.getInstance().then((preferences) {
preferences.setString(
LocalStorageKeys.prevTrackHotKey,
jsonEncode(value?.toJson() ?? {}),
);
});
notifyListeners();
}
setPlayPauseHotKey(HotKey? value) {
playPauseHotKey = value;
SharedPreferences.getInstance().then((preferences) {
preferences.setString(
LocalStorageKeys.playPauseHotKey,
jsonEncode(value?.toJson() ?? {}),
);
});
notifyListeners();
}
}