Почему в моментальных снимках 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
        }
      });
Другие вопросы по тегам