forked from hiddify/hiddify-app
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreferences_provider.dart
More file actions
37 lines (32 loc) · 1.29 KB
/
preferences_provider.dart
File metadata and controls
37 lines (32 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import 'dart:io';
import 'package:hiddify/core/model/environment.dart';
import 'package:hiddify/utils/platform_utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:loggy/loggy.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:shared_preferences/shared_preferences.dart';
part 'preferences_provider.g.dart';
@Riverpod(keepAlive: true)
Future<SharedPreferences> sharedPreferences(Ref ref) async {
final logger = Loggy("preferences");
SharedPreferences? sharedPreferences;
logger.debug("initializing preferences");
try {
if (PlatformUtils.isWindows && Environment.isPortable) SharedPreferences.setPrefix('portable.');
sharedPreferences = await SharedPreferences.getInstance();
} catch (e) {
logger.error("error initializing preferences", e);
if (!Platform.isWindows && !Platform.isLinux) {
rethrow;
}
// https://github.com/flutter/flutter/issues/89211
final directory = await getApplicationSupportDirectory();
final file = File(p.join(directory.path, 'shared_preferences.json'));
if (file.existsSync()) {
file.deleteSync();
}
}
return sharedPreferences ??= await SharedPreferences.getInstance();
}