import 'dart:convert'; import 'package:rxdart/subjects.dart'; import 'package:tunas/clients/storage/storage_client.dart'; import 'package:tunas/repositories/account/models/account.dart'; import 'package:tunas/repositories/account/models/transaction.dart'; class AccountRepository { String accountFile = 'main_account.json'; final StorageClient _storageClient; final _transactionsController = BehaviorSubject>.seeded(const []); AccountRepository({ required storageClient, }) : _storageClient = storageClient { init(); } init() async { final account = await getAccount(); _transactionsController.add(account.transactions); } Stream> getTransactionsStream() { return _transactionsController.asBroadcastStream(); } Future getAccount() async { String json = await _storageClient.load(accountFile); Map accountJson = jsonDecode(json); return Account.fromJson(accountJson); } saveAccount(Account account) async { await _storageClient.save(accountFile, jsonEncode(account.toJson())); } saveTransactions(List transactions) async { final account = Account(transactions: transactions); await saveAccount(account); _transactionsController.add(account.transactions); } }