Я хочу иметь возможность вводить строковое значение и выводить объект. Передав код языка и вернув список статей на его основе.
Я новичок в трепетании и даже больше в реактивном программировании, поэтому поначалу 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);
}