Я пытаюсь сделать простой запрос к бэкэнду, используя rxDart. Но проблема, с которой я сталкиваюсь, заключается в том, что когда я получаю http-ошибку, такую как 404, onError не вызывается, однако ее можно извлечь в onData.
У меня небольшой опыт работы с модификацией RxJava +, и там она работает, как и ожидалось, когда есть ответ с ошибкой http, вызывается код состояния onError и может обрабатываться соответствующим образом.
Что я делаю неправильно или это предполагаемое поведение?
Object sendProfileData() {
Stream<Response> stream = onboardingRepository
.createUser(User(name: 'name', surname: 'surname', lat: 1.0, lng: 2.0));
stream.listen((response) {
print(response.statusCode);
setAttributes();
}, onError: (e) {
print(e);
});
}
OnboardingRepository.dart:
class OnboardingRepository {
Observable<Response> createUser(User user) {
return Observable.fromFuture(TMApi.createUser(user));
}
}
TMApi.dart:
class TMApi {
static Future<http.Response> createUser(User user) async {
String url = '$baseUrl/create_user';
return await http.post(url, body: json.encode(user.toJson()));
}
}
Как лучше всего обработать событие в представлении? В случае возникновения ошибки должна отображаться ошибка, в противном случае должен открыться новый экран. Метод sendProfileData () вернет Object, основываясь на том, что я собираюсь выполнить действия в представлении, но это не похоже на очень элегантное решение ...
Любые предложения по архитектуре приветствуются:)