为啥 Future.Builder 中的快照从不出错?

Posted

技术标签:

【中文标题】为啥 Future.Builder 中的快照从不出错?【英文标题】: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()。提前致谢。

【问题讨论】:

【参考方案1】:

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

像这样 -

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

【讨论】:

以上是关于为啥 Future.Builder 中的快照从不出错?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 TypeScript 在使用 concat 减少数组时会推断出“从不”类型?

为啥联合类型中的“从不”类型毫无意义?

如何使用 Flutter 数据模型和 Future Builder

无法在Future Builder中显示解析的JSON

如何使用 Future Builder 创建包含来自 Cloud FireStore 的数据的列表

Swift 3 / 为啥快照视图中的快照在 iPhone 7 Plus 模拟器中显示为空白?