dev
dart 47 lines 1.56 KB
Raw
1 import 'package:cake_wallet/exchange/provider/trocador_exchange_provider.dart';
2 import 'package:cake_wallet/store/settings_store.dart';
3 import 'package:mobx/mobx.dart';
4
5 part 'trocador_providers_view_model.g.dart';
6
7 class TrocadorProvidersViewModel = TrocadorProvidersViewModelBase with _$TrocadorProvidersViewModel;
8
9 abstract class TrocadorProvidersViewModelBase with Store {
10 TrocadorProvidersViewModelBase(this._settingsStore, this.trocadorExchangeProvider) {
11 fetchTrocadorPartners();
12 }
13
14 final SettingsStore _settingsStore;
15 final TrocadorExchangeProvider trocadorExchangeProvider;
16
17 @observable
18 ObservableFuture<Map<String, bool>>? fetchProvidersFuture;
19
20 Map<String, String> providerRatings = {};
21
22 @computed
23 bool get isLoading => fetchProvidersFuture?.status == FutureStatus.pending;
24
25 @action
26 Future<void> fetchTrocadorPartners() async {
27 fetchProvidersFuture =
28 ObservableFuture(trocadorExchangeProvider.fetchProviders().then((providers) {
29 var providerNames = providers.map((e) => e.name).toList();
30
31 providerRatings = {for (var provider in providers) provider.name: provider.rating};
32
33 return _settingsStore
34 .updateAllTrocadorProviderStates(providerNames)
35 .then((_) => _settingsStore.trocadorProviderStates);
36 }));
37 }
38
39 @computed
40 Map<String, bool> get providerStates => _settingsStore.trocadorProviderStates;
41
42 @action
43 void toggleProviderState(String providerName) {
44 final currentState = providerStates[providerName] ?? false;
45 _settingsStore.setTrocadorProviderState(providerName, !currentState);
46 }
47 }