-
Notifications
You must be signed in to change notification settings - Fork 77
Expand file tree
/
Copy pathsettings_entity.dart
More file actions
98 lines (82 loc) · 2.47 KB
/
Copy pathsettings_entity.dart
File metadata and controls
98 lines (82 loc) · 2.47 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
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
93
94
95
96
97
98
import 'package:bb_mobile/core/utils/logger.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'settings_entity.freezed.dart';
enum Environment {
mainnet,
testnet;
factory Environment.fromName(String name) {
return Environment.values.firstWhere(
(environment) => environment.name == name,
);
}
bool get isMainnet => this == Environment.mainnet;
bool get isTestnet => this == Environment.testnet;
}
enum BitcoinUnit {
btc(code: 'BTC', decimals: 8),
sats(code: 'sats', decimals: 0);
final String code;
final int decimals;
const BitcoinUnit({required this.code, required this.decimals});
factory BitcoinUnit.fromName(String name) {
return BitcoinUnit.values.firstWhere(
(bitcoinUnit) => bitcoinUnit.name == name,
);
}
factory BitcoinUnit.fromCode(String code) {
return BitcoinUnit.values.firstWhere(
(bitcoinUnit) => bitcoinUnit.code == code,
);
}
}
enum Language {
unitedStatesEnglish('en', 'US', 'English'),
franceFrench('fr', 'FR', 'Français'),
spanish('es', 'ES', 'Español'),
finnish('fi', 'FI', 'Suomeksi');
final String languageCode;
final String? countryCode;
final String label;
const Language(this.languageCode, this.countryCode, this.label);
static Language fromName(String name) {
try {
return Language.values.firstWhere((language) => language.name == name);
} catch (e) {
log.warning('unsupported language fallback on default');
return Language.unitedStatesEnglish;
}
}
}
enum AppThemeMode {
light,
dark,
system;
factory AppThemeMode.fromName(String name) {
return AppThemeMode.values.firstWhere(
(themeMode) => themeMode.name == name,
orElse: () => AppThemeMode.system,
);
}
}
extension LanguageExtension on Language {
Locale get locale => Locale(languageCode, countryCode);
bool isLocale(Locale locale) =>
locale.languageCode == languageCode && locale.countryCode == countryCode;
}
@freezed
abstract class SettingsEntity with _$SettingsEntity {
const factory SettingsEntity({
required Environment environment,
required BitcoinUnit bitcoinUnit,
Language? language,
required String currencyCode,
bool? hideAmounts,
bool? isSuperuser,
bool? isDevModeEnabled,
@Default(false) bool useTorProxy,
@Default(9050) int torProxyPort,
@Default(AppThemeMode.system) AppThemeMode themeMode,
}) = _SettingsEntity;
const SettingsEntity._();
}