import 'dart:async'; import 'package:cake_wallet/core/wallet_base.dart'; import 'package:cake_wallet/src/domain/exchange/changenow/changenow_exchange_provider.dart'; import 'package:cake_wallet/src/domain/exchange/exchange_provider.dart'; import 'package:cake_wallet/src/domain/exchange/exchange_provider_description.dart'; import 'package:cake_wallet/src/domain/exchange/morphtoken/morphtoken_exchange_provider.dart'; import 'package:cake_wallet/src/domain/exchange/trade.dart'; import 'package:cake_wallet/src/domain/exchange/xmrto/xmrto_exchange_provider.dart'; import 'package:cake_wallet/store/dashboard/trades_store.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; part 'exchange_trade_view_model.g.dart'; class ExchangeTradeViewModel = ExchangeTradeViewModelBase with _$ExchangeTradeViewModel; abstract class ExchangeTradeViewModelBase with Store { ExchangeTradeViewModelBase({this.wallet, this.trades, this.tradesStore}) { trade = tradesStore.trade; isSendable = trade.from == wallet.currency || trade.provider == ExchangeProviderDescription.xmrto; switch (trade.provider) { case ExchangeProviderDescription.xmrto: _provider = XMRTOExchangeProvider(); break; case ExchangeProviderDescription.changeNow: _provider = ChangeNowExchangeProvider(); break; case ExchangeProviderDescription.morphToken: _provider = MorphTokenExchangeProvider(trades: trades); break; } _updateTrade(); _timer = Timer.periodic(Duration(seconds: 20), (_) async => _updateTrade()); } final WalletBase wallet; final Box trades; final TradesStore tradesStore; @observable Trade trade; @observable bool isSendable; ExchangeProvider _provider; Timer _timer; @action Future _updateTrade() async { try { final updatedTrade = await _provider.findTradeById(id: trade.id); if (updatedTrade.createdAt == null && trade.createdAt != null) { updatedTrade.createdAt = trade.createdAt; } trade = updatedTrade; } catch (e) { print(e.toString()); } } }