11import 'dart:async' ;
22
3+ import 'package:flutter_secure_storage/flutter_secure_storage.dart' ;
34import 'package:shared_preferences/shared_preferences.dart' ;
45
5- const _kShowChatAvatarChangesKey = 'showChatAvatarChanges' ;
6- const _kShowChatDisplaynameChangesKey = 'showChatDisplaynameChanges' ;
7-
86class SettingsService {
9- SettingsService ({required SharedPreferences sharedPreferences})
10- : _sharedPreferences = sharedPreferences;
11-
12- Future <void > dispose () async => _propertiesChangedController.close ();
7+ SettingsService ({
8+ required SharedPreferences sharedPreferences,
9+ required FlutterSecureStorage secureStorage,
10+ }) : _sharedPreferences = sharedPreferences,
11+ _secureStorage = secureStorage;
1312
13+ final FlutterSecureStorage _secureStorage;
1414 final SharedPreferences _sharedPreferences;
1515 final _propertiesChangedController = StreamController <bool >.broadcast ();
1616 Stream <bool > get propertiesChanged => _propertiesChangedController.stream;
@@ -19,14 +19,51 @@ class SettingsService {
1919 }
2020
2121 bool get showAvatarChanges =>
22- _sharedPreferences.getBool (_kShowChatAvatarChangesKey ) ?? false ;
22+ _sharedPreferences.getBool (SettingKeys .showChatAvatarChanges ) ?? false ;
2323 void setShowAvatarChanges (bool value) => _sharedPreferences
24- .setBool (_kShowChatAvatarChangesKey , value)
24+ .setBool (SettingKeys .showChatAvatarChanges , value)
2525 .then (notify);
2626
2727 bool get showChatDisplaynameChanges =>
28- _sharedPreferences.getBool (_kShowChatDisplaynameChangesKey) ?? false ;
28+ _sharedPreferences.getBool (SettingKeys .showChatDisplaynameChanges) ??
29+ false ;
2930 void setShowChatDisplaynameChanges (bool value) => _sharedPreferences
30- .setBool (_kShowChatDisplaynameChangesKey , value)
31+ .setBool (SettingKeys .showChatDisplaynameChanges , value)
3132 .then (notify);
33+
34+ Object ? get <T >(String key) => switch (T ) {
35+ const (String ) => _sharedPreferences.getString (key),
36+ const (bool ) => _sharedPreferences.getBool (key),
37+ const (double ) => _sharedPreferences.getDouble (key),
38+ const (int ) => _sharedPreferences.getInt (key),
39+ const (List <String >) => _sharedPreferences.getStringList (key),
40+ _ => throw Exception ('Invalid type' ),
41+ };
42+
43+ void set ({required String key, required Object value}) => switch (value) {
44+ const (String ) =>
45+ _sharedPreferences.setString (key, value as String ).then (notify),
46+ const (bool ) =>
47+ _sharedPreferences.setBool (key, value as bool ).then (notify),
48+ const (double ) =>
49+ _sharedPreferences.setDouble (key, value as double ).then (notify),
50+ const (int ) =>
51+ _sharedPreferences.setInt (key, value as int ).then (notify),
52+ const (List <String >) => _sharedPreferences
53+ .setStringList (key, value as List <String >)
54+ .then (notify),
55+ _ => throw Exception ('Invalid type' ),
56+ };
57+
58+ Future <String ?> getSecure <T >(String key) => _secureStorage.read (key: key);
59+
60+ void setSecure ({required String key, required String value}) =>
61+ _secureStorage.write (key: key, value: value).then ((_) => notify (true ));
62+
63+ Future <void > dispose () async => _propertiesChangedController.close ();
64+ }
65+
66+ class SettingKeys {
67+ static const showChatAvatarChanges = 'showChatAvatarChanges' ;
68+ static const showChatDisplaynameChanges = 'showChatDisplaynameChanges' ;
3269}
0 commit comments