#flutter #dart #rxdart
#flutter #dart #rxdart
Вопрос:
У меня есть два класса: CurrencyRepo и CurrencyFetcher. Из CurrencyFetcher я пытаюсь прослушать BehaviorSubject, который находится в репозитории. Но когда я добавляю значения в BehaviorSubject внутри репозитория, CurrencyFetcher не получает эти значения. Что я делаю не так?
class CurrencyFetcher implements CurrencyFetcherService {
final CurrencyRepo _currencyRepo;
StreamSubscription currencySubscription;
CurrencyFetcher(this._currencyRepo, this._preferencesService) {
_subscribeToCurrencies();
}
void _subscribeToCurrencies() {
currencySubscription = _currencyRepo
.getCurrenciesStream()
.listen((currencies) => _handleApiCurrencies);
}
Future<void> _handleApiCurrencies(List<ApiCurrency> apiCurrencies) async {
// implemetation
}
}
class CurrencyRepo {
final CurrencyApi _currencyApi;
final BehaviorSubject<List<ApiCurrency>> _currencySubject = BehaviorSubject.seeded([]);
Stream<List<ApiCurrency>> getCurrenciesStream() {
_updateCurrencies();
return _currencySubject.stream;
}
CurrencyRepo(this._currencyApi);
void _updateCurrencies() {
_currencyApi.getCurrencies().then((currencies) {
_currencySubject.add(currencies);
});
}
}
Я проверил, что значения добавляются в поток после того, как CurrencyFetcher начинает прослушивать. И я проверил, что в тот момент, когда я добавляю новое значение в поток, у него есть слушатель. Кто-нибудь может помочь при первом использовании RxDart? 🙂
Комментарии:
1. Я попытался отладить его, поставил точку останова внутри этого обратного вызова и я увидел, что список ‘currencies’ не пуст, он содержит 61 элемент
Ответ №1:
Внутри функции _subscribeToCurrencies()
попробуйте написать
_currencyRepo.currenciesStream.listen((currencies) {
_handleApiCurrencies(currencies);
});
вместо
_currencyRepo.currenciesStream.listen(_handleApiCurrencies);