CakeWallet/lib/view_model/dev/shared_preferences.dart
cyan 02e74b5997
CW-1000 Background sync improvements (#2142)
* feat: background sync improvements

- dev options on ci build cherrypick
- add permissions for background sync to AndroidManifestBase
- enable desugaring + update java compatibility to 17
- update walletconnect_flutter_v2
- update ens_dart
- update nostr_tools
- add notification for new transactions found in background
- expose more settings from flutter_daemon in UI
- remove battery optimization setting when it's already disabled
- fix notification permission handling
- fix background sync last trigger saving
- prevent notifications from being duplicated

* potential fix for multiple notifications firing for the same tx

* improve logging in background sync

* ui improvements to ignore battery optimization popup

* feat: logs for bg sync
disable decred bgsync

* fix: call store() directly to be sure that it is writing the data

* chore: rename logs to background sync logs

* Update lib/view_model/dashboard/dashboard_view_model.dart

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

* chore: remove unused key

---------

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2025-04-24 19:06:43 +02:00

92 lines
2.3 KiB
Dart

import 'package:mobx/mobx.dart';
import 'package:shared_preferences/shared_preferences.dart';
part 'shared_preferences.g.dart';
class DevSharedPreferences = DevSharedPreferencesBase with _$DevSharedPreferences;
enum PreferenceType {
unknown,
string,
int,
double,
bool,
listString
}
abstract class DevSharedPreferencesBase with Store {
DevSharedPreferencesBase() {
SharedPreferences.getInstance().then((value) {
sharedPreferences = value;
});
}
@observable
SharedPreferences? sharedPreferences;
@computed
List<String> get keys => (sharedPreferences?.getKeys().toList()?..sort()) ?? [];
@action
Future<void> delete(String key) async {
if (sharedPreferences == null) {
return;
}
await sharedPreferences!.remove(key);
}
dynamic get(String key) {
if (sharedPreferences == null) {
return null;
}
return sharedPreferences!.get(key);
}
Future<void> set(String key, PreferenceType type, dynamic value) async {
if (sharedPreferences == null) {
return;
}
switch (type) {
case PreferenceType.string:
await sharedPreferences!.setString(key, value as String);
break;
case PreferenceType.bool:
await sharedPreferences!.setBool(key, value as bool);
break;
case PreferenceType.int:
await sharedPreferences!.setInt(key, value as int);
break;
case PreferenceType.double:
await sharedPreferences!.setDouble(key, value as double);
break;
case PreferenceType.listString:
await sharedPreferences!.setStringList(key, List<String>.from(value as Iterable<dynamic>));
break;
default:
throw Exception("Unknown preference type: $type");
}
}
PreferenceType getPreferenceType(String key) {
if (sharedPreferences == null) {
return PreferenceType.unknown;
}
final value = sharedPreferences!.get(key);
if (value is String) {
return PreferenceType.string;
}
if (value is bool) {
return PreferenceType.bool;
}
if (value is int) {
return PreferenceType.int;
}
if (value is double) {
return PreferenceType.double;
}
if (value is List<String>) {
return PreferenceType.listString;
}
return PreferenceType.unknown;
}
}