Флаттер BLoC RxDart: Как ввести значение определенного типа и вывести другое? - PullRequest
0 голосов
/ 03 октября 2019

Я хочу иметь возможность вводить строковое значение и выводить объект. Передав код языка и вернув список статей на его основе.

Я новичок в трепетании и даже больше в реактивном программировании, поэтому поначалу BLoC и Rx довольно сложны для понимания.


  final String _apiUrl = "some_url";
  final String _unencodedPath = "/api/news/get";

  final _languageController = BehaviorSubject<String>(seedValue: "");
  Sink<String> get language => _languageController.sink;

  final _articlesController = BehaviorSubject<List<Datum>>(seedValue: []);
  get outArticles =>_articlesController.stream;
  get _inArticles =>_articlesController.sink;

  ArticleBloc(){
    _languageController.stream.listen((lang) {
      getArticles(lang);
    });
}

  void dispose(){
    _articlesController.close();
    _languageController.close();
  }

  Future<void> getArticles(String lang) async{
    var uri = Uri.https(_apiUrl, _unencodedPath, {
      'device': 'desktop',
      'category': 'news',
      'locale': lang});
    var storyRes = await http.get(uri);
    _inArticles.add(parseDatum((storyRes.body)).data.toList());
  }

}

Вот как я пытался, но, очевидно, это не сработало.

РЕДАКТИРОВАТЬ

Мне это удалось, но я не совсем уверен, что этохорошая практика, дайте мне знать, пожалуйста:

Stream<List<Datum>> streamArticles(String lg) async* {
    yield await getArticles(lg);
  }
...