【问题标题】:Why snapshot inside Future.Builder has never errors?为什么 Future.Builder 中的快照从不出错?
【发布时间】:2021-10-25 19:23:07
【问题描述】:

为 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()。提前致谢。

【问题讨论】:

    标签: flutter flutter-futurebuilder flutter-future flutter-exception


    【解决方案1】:

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

    像这样 -

    FutureBuilder(
          future: new Future(() => {Singleton().request()}),
          builder: (context, snapshot) {
            if (snapshot.hasError) {
                // do something
            } else if(snapshot.hasData) {
                // do something
            }
          });
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2012-08-31
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多