Я хотел бы сделать что-то очень простое, но я очень новичок в мире Rx и у меня есть некоторые проблемы с переводом моей логики в код. Процесс такой:
- пользователь имеет некоторый код и вводит его в приложение,
Bloc.postCode (код) называется
- этот код используется для множественных вызовов серверных API, а данные сохраняются в БД с использованием асинхронных вызовов через await, при каждом вызове я хотел бы опубликовать статус на Bloc.status.sink.add - это будет отображаться в приложении с помощью StreamBuilder
Мой текущий код:
class Bloc {
final _code = PublishSubject<String>();
final _status = BehaviorSubject<Status>();
// stream
Observable<Status> get status => _status.stream;
// sink
Function(String) get postCode => _code.sink.add;
Bloc() {
_code.stream
.map(_processCode)
.listen((status) => _status.sink.add(status));
}
_processCode(code) {
// here I would like to do multiple http/db requests
// and wait for end with await while posting status update
// to the user something like:
// _status.sink.add(Status(status: 'RETRIEVING USERS'));
// var users = await Api.GetUsers(code);
// await DB.SaveUsers(users);
// _status.sink.add(Status(status: 'RETRIEVING IMAGES'));
// var images = await Api.GetUsersImages(users);
// _status.sink.add(Status(status: 'SAVING IMAGES'));
// images.forEach((image) => await FileUtils.SaveImage(image));
return Status(status: 'DONE');
}
}
Я не уверен, как мне решить эту проблему - какой будет лучший подход?