2

为 FutureBuilder 生成 snapshot.error 的正确方法是什么?我有一个单例来处理 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()。提前致谢。

4

1 回答 1

0

这是因为如果快照有错误,则意味着快照有数据,因此永远不会到达 else if 语句。您应该首先检查任何错误,然后检查数据。

像这样 -

FutureBuilder(
      future: new Future(() => {Singleton().request()}),
      builder: (context, snapshot) {
        if (snapshot.hasError) {
            // do something
        } else if(snapshot.hasData) {
            // do something
        }
      });
于 2021-08-25T16:24:14.213 回答