dispose method
Implementation
Future<void> dispose() async {
_isDisposed = true;
try {
await _initializationFuture;
} catch (_) {
// Ignore initialization errors during dispose.
}
final futures = <Future>[];
_walletsUsecaseSubscription?.cancel();
// Dispose all wallets with their providers
for (final wallet in _wallets) {
final provider = _providers[wallet.type];
if (provider != null) {
futures.add(provider.removeWallet(wallet));
}
}
// cancel all subscriptions
for (final subs in _subscriptions.values) {
for (final sub in subs) {
futures.add(sub.cancel());
}
}
// close all streams
futures.addAll([
_combinedBalancesSubject.close(),
_combinedPendingTransactionsSubject.close(),
_combinedRecentTransactionsSubject.close(),
]);
for (final stream in _walletBalanceStreams.values) {
futures.add(stream.close());
}
for (final stream in _walletPendingTransactionStreams.values) {
futures.add(stream.close());
}
for (final stream in _walletRecentTransactionStreams.values) {
futures.add(stream.close());
}
await Future.wait(futures);
_balancesActivated = false;
_pendingActivated = false;
_recentActivated = false;
_wallets.clear();
_walletsBalances.clear();
_walletsPendingTransactions.clear();
_walletsRecentTransactions.clear();
_walletBalanceStreams.clear();
_walletPendingTransactionStreams.clear();
_walletRecentTransactionStreams.clear();
_subscriptions.clear();
}