【问题标题】:RxDart. Listener of BehaviorSubject does not get value after subject.add(value)RxDart。 BehaviorSubject 的监听器在 subject.add(value) 之后没有得到值
【发布时间】:2020-12-09 18:15:51
【问题描述】:

我有两个类:CurrencyRepo 和 CurrencyFetcher。从 CurrencyFetcher 我尝试收听 repo 中的 behaviorSubject。但是当我在 repo 内的 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,有人可以帮忙吗? :)

【问题讨论】:

  • 我试过调试它,在这个回调中放了一个断点,我发现“货币”列表不是空的,它有 61 个元素

标签: flutter dart rxdart


【解决方案1】:

函数里面_subscribeToCurrencies()试试写

_currencyRepo.currenciesStream.listen((currencies) {
      _handleApiCurrencies(currencies);
});

而不是

_currencyRepo.currenciesStream.listen(_handleApiCurrencies);

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2019-08-06
    • 2019-08-31
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多