Почему в моментальных снимках Future.Builder никогда не бывает ошибок?
Как правильно создать snapshot.error для FutureBuilder? У меня есть синглтон для обработки HTTP-запросов с помощью метода:
try {
var response = await http.get(url);
// Success
if (response.statusCode == 200) {
[...]
}
// Failure
else {
return Future.error("Error");
}
} catch (e) {
return Future.error("Error");
}
С другой стороны, у меня есть виджет с FutureBuilder:
FutureBuilder(
future: new Future(() => {Singleton().request()}),
builder: (context, snapshot) {
if (snapshot.hasData) {
// snapshot has ALWAYS data even if I return error
} else if(snapshot.hasError) {
// never reach this statement
}
});
Что я делаю неправильно? Не могли бы вы указать мне правильное направление работы с ошибками? Я бы хотел избежать обратного вызова catchError(). Заранее спасибо.
1 ответ
Это потому, что если в моментальном снимке есть ошибка, это будет означать, что в моментальном снимке есть данные, и поэтому оператор else if никогда не будет достигнут. Вы должны сначала проверить наличие ошибок, а затем данные.
Нравится -
FutureBuilder(
future: new Future(() => {Singleton().request()}),
builder: (context, snapshot) {
if (snapshot.hasError) {
// do something
} else if(snapshot.hasData) {
// do something
}
});