-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsettings.dart
92 lines (75 loc) · 2.87 KB
/
settings.dart
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import 'dart:async';
import 'package:eidmsdk/types.dart';
import 'package:flutter/foundation.dart';
import 'package:notified_preferences/notified_preferences.dart';
import 'pdf_signing_option.dart';
import 'signature_type.dart';
/// General app settings.
abstract interface class Settings {
/// Accepted Privacy Policy document version value.
ValueNotifier<String?> get acceptedPrivacyPolicyVersion;
/// Accepted Terms of Service document version value.
ValueNotifier<String?> get acceptedTermsOfServiceVersion;
/// The signing container value.
ValueNotifier<PdfSigningOption> get signingPdfContainer;
/// The signing [Certificate] value.
ValueNotifier<Certificate?> get signingCertificate;
/// The signing [SignatureType] value.
ValueNotifier<SignatureType> get signatureType;
/// Whether passed onboarding screen for "Remote Document Signing" feature.
ValueNotifier<bool> get remoteDocumentSigningOnboardingPassed;
/// Clear all setting.
Future<bool> clear();
/// Creates and returns new [Settings].
static Future<Settings> create([
FutureOr<SharedPreferences>? preferences,
]) async {
final settings = _SettingsImpl();
await settings.initialize(preferences);
return settings;
}
}
/// [Settings] implementation that uses [SharedPreferences].
/// Note, [clear] is from [NotifiedPreferences].
// TODO Register Settings using Injectable as singleton - would need to pass instance into DI so no need to use "async"
// This is needed not only for convenience when constructing Blocks, however needed for tests
class _SettingsImpl with NotifiedPreferences implements Settings {
@override
late final ValueNotifier<String?> acceptedPrivacyPolicyVersion =
createSetting<String?>(
key: 'doc.pp.version.accepted',
initialValue: null,
);
@override
late final ValueNotifier<String?> acceptedTermsOfServiceVersion =
createSetting<String?>(
key: 'doc.tos.version.accepted',
initialValue: null,
);
@override
late final ValueNotifier<PdfSigningOption> signingPdfContainer =
createEnumSetting(
key: 'signing.pdf.container',
initialValue: PdfSigningOption.pades,
values: PdfSigningOption.values,
);
@override
late final ValueNotifier<SignatureType> signatureType = createEnumSetting(
key: 'signing.signatureType',
initialValue: SignatureType.withoutTimestamp,
values: SignatureType.values,
);
@override
late final ValueNotifier<Certificate?> signingCertificate =
createJsonSetting<Certificate?>(
key: 'signing.certificate',
initialValue: null,
fromJson: (json) => Certificate.fromJson(json),
);
@override
late final ValueNotifier<bool> remoteDocumentSigningOnboardingPassed =
createSetting(
key: "onboarding.remoteDocumentSigning.passed",
initialValue: false,
);
}