import 'package:flutter/foundation.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/transaction_info.dart'; abstract class TransactionHistoryBase { TransactionHistoryBase() : _isUpdating = false; @observable ObservableMap transactions; bool _isUpdating; @action Future update() async { if (_isUpdating) { return; } try { _isUpdating = true; final _transactions = await fetchTransactions(); transactions.keys .toSet() .difference(_transactions.keys.toSet()) .forEach((k) => transactions.remove(k)); _transactions.forEach((key, value) => transactions[key] = value); _isUpdating = false; } catch (e) { _isUpdating = false; rethrow; } } void updateAsync({void Function() onFinished}) { fetchTransactionsAsync( (transaction) => transactions[transaction.id] = transaction, onFinished: onFinished); } void fetchTransactionsAsync( void Function(TransactionType transaction) onTransactionLoaded, {void Function() onFinished}); Future> fetchTransactions(); }