如何修复此错误:构建 FutureBuilder 时抛出以下断言(脏,状态:_FutureBuilderState#89711):

2024-01-10

这是错误:

有问题的小部件是:FutureBuilder 构建函数绝不能返回 null。 要返回导致建筑小部件填充可用空间的空白空间,请返回“Container()”。要返回占用尽可能少空间的空白空间,请返回“Container(width: 0.0, height: 0.0)”。

这是获取 Firebase 实时数据的函数:

Future<void> getCategoriesName() async {
   
    await  FirebaseDatabase.instance.reference().child('Categories').once()
        .then((DataSnapshot dataSnapshot){
      var key  = dataSnapshot.value.keys;
      for(var i in key)
      {
        CategoryItems categoryItems =  new CategoryItems(
            dataSnapshot.value[i]['CategoryName'],
            dataSnapshot.value[i]['Counter']
            

        );
        categoryItemList.add(categoryItems);
      }
      setState(() {
        print(categoryItemList.length);
      });

    });
  }

这是我的未来构建器功能:

 Container(
                        margin: EdgeInsets.only(bottom: 50,top: 100),
                        child: FutureBuilder(
                          future: FirebaseDatabase.instance.reference().child('Categories').child(_userPin).once(),
                          // ignore: missing_return
                          builder: (context, snapshot) {
                            if(snapshot.hasData){
                               if (snapshot.data!=null) {
                                return Expanded();
                               }else{
                                 return Loader();
                               }
                          }
                          }
                        ),
                      ),

在 Expanded 内部,我有 ListView.builder,仅当我的数据加载时,上述错误才会抛出几秒钟,它会在屏幕上显示项目。我在 FutureBuiler 的容器之上有 Stack 小部件。


看来您没有从以下位置返回任何内容builder回调函数,当snapshot.hasData是假的。这解释了为什么在从数据库加载数据之前您只会短暂地看到错误。你可以返回一个CircularProgressIndicator小部件来自builder当您等待数据从数据库到达时的回调函数。你也可以摆脱// ignore: missing_return评论因为builder回调函数应该始终返回一个小部件。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(
          margin: EdgeInsets.only(bottom: 50, top: 100),
          child: FutureBuilder(
            future: FirebaseDatabase.instance.reference().child('Categories').child(_userPin).once(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                if (snapshot.data != null) {
                  return Expanded();
                } else {
                  return Loader();
                }
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复此错误:构建 FutureBuilder 时抛出以下断言(脏,状态:_FutureBuilderState#89711): 的相关文章

随机推荐

  • Laravel 4 中的 Cron 作业

    我需要一个 Cron 作业来对网站执行 Scraper 并发送包含信息的电子邮件 我创建了一个控制器来执行此操作 但是当我设置命令来运行该文件时 php app controllers ScraperController php 我收到这个
  • 使用 Javascript/jQuery 以编程方式关闭 SELECT 下拉列表

    我有一个用一个值初始化的下拉列表 当用户单击它时 单个元素将被删除 并添加一个新元素 并显示 正在加载 然后向服务器发出 AJAX 调用 返回时 新值将添加到控件中 问题是该控件在更新时保持打开状态 我想将其关闭 这是一个例子 http j
  • 为什么 Active Directory 不向我返回 PagedResultsResponseControl?

    我正在尝试从 Java 枚举 Active Directory 中的所有组 有很多 所以我得到了SizeLimitExceededException1000 个结果后 我正在尝试使用PagedResultsControl 我的代码非常接近地
  • 在 Facebook Graph API 中,获取用户电子邮件地址和性别的 API 调用是什么?

    我在以下链接的帮助下使用 Graph API 和 Facebook SDK for PHP https developers facebook com docs php howto profilewithgraphapi 4 0 0 htt
  • 加载 XGBoost 模型:ModuleNotFoundError:没有名为“sklearn.preprocessing._label”的模块

    我在使用以下代码加载预训练的 xgboost 模型时遇到问题 xgb model pickle load open churnfinalunscaled pickle dat rb 当我这样做时 我收到以下错误 ModuleNotFound
  • 聊天中的 Python 客户端

    我在尝试构建聊天客户端时遇到问题 我刚刚开始 这是我的代码 import socket my socket socket socket socket AF INET socket SOCK STREAM my socket connect
  • NetLogo 高效创建任意度数分布的网络

    这是一个后续问题NetLogo 创建固定数量链接的有效方法 https stackoverflow com questions 32967388 netlogo efficient way to create fixed number of
  • 优化 Swift 中的嵌套 for 循环

    我得到了这个方法来计算白色像素UIImage 我需要遍历所有像素来增加我找到的每个白色像素的计数器 我正在尝试提高它的性能 但我找不到更好的方法 有任何想法吗 func whitePixelCount gt Int let width In
  • Lambda 表达式常用语法

    我可以遵循任何简单的语法或规则来在 C 中构建 lambda 表达式 吗 我阅读了一些文章并了解了 lambda 表达式是什么 但如果我有通用语法或规则 那将会有所帮助 有多种表达 lambda 的方法 具体取决于具体场景 一些示例 sim
  • Magento - JavaScript 错误阻止添加和保存类别

    我正在尝试在 Magento CE 1 8 1 的本地安装上添加新的根类别 但是当我按下 保存类别 按钮时 我在控制台中收到以下错误 并且屏幕上没有任何反应 我尝试重新安装所有核心文件等 但似乎没有任何方法可以解决此问题 Uncaught
  • Gdata包perl问题

    我正在尝试遵循这个简单的 2 分钟视频教程 将 Excel 电子表格作为数据框导入到 R 中 http www screenr com QiN8 http www screenr com QiN8 我遵循了每个步骤 包括在我的 Win 7
  • 通过 HttpClientFactory 实现实现动态代理

    I have Asp Net Core WebApi 我正在根据以下方式发出 Http 请求HttpClientFactory模式 https learn microsoft com en us aspnet core fundamenta
  • 浅层渲染依赖于 TweenLite 的组件

    我正在尝试使用 React 组件进行简单的单元测试 但我不断收到 C work portfolio node modules gsap TweenMax js 13 import TweenLite TweenPlugin Ease Pow
  • 如何在javascript文件之间共享数据?

    我 我认为 有 js 的独特问题 我正在使用量角器和 Jasmine 编写测试 我需要在 js 文件之间共享数据 有什么办法可以做到这一点吗 我找到的所有解决方案都是针对网页的 我只使用 js 文件 我期待您的迅速回复 如果有任何信息缺失
  • 使用 HttpClient 写入正文请求

    我想用 XML 内容类型编写请求正文 但我不知道如何使用 HttpClient 对象 http hc apache org httpclient 3 x apidocs index html http hc apache org httpc
  • 联合身份验证令牌保存在哪里 [WIF STS]?

    当我开始探索 WIF 时 我对以下几点有疑问 在Windows Identity Foundation WIF 中 查看安全令牌服务 STS 我想知道在哪里联合身份验证令牌正在被拯救吗 我认为它在浏览器 cookie 中 如果是的话 有人可
  • 如何在 Debian Wheezy 上安装 git 1.8 或更高版本

    我正在尝试安装更高版本的 git 主要是 1 8 或更高版本 如果我尝试使用安装它apt get install git我最终安装版本1 7 10 4 我已经尝试使用以下方法更改存储库 add apt repository ppa git
  • session._get_current_object() 到底返回什么对象?

    我正在使用 Flask 努力了解会话如何工作的细节 我正在使用 Python 3 6 1 烧瓶0 12 2 烧瓶文档明确指出 http flask pocoo org docs 0 12 api flask session 粗体是我的 会话
  • 按列逐行匹配两个文件 - 无键

    我有两个包含 80 000 多条长度相同的记录的大文件 我需要按文件的前 8 个字符逐行比较两个文件 文件一的第一行将与文件二的第一行进行比较 文件一的第二行将与文件二的第二行进行比较 样本文件1 01234567blah blah1 11
  • 如何修复此错误:构建 FutureBuilder 时抛出以下断言(脏,状态:_FutureBuilderState#89711):

    这是错误 有问题的小部件是 FutureBuilder 构建函数绝不能返回 null 要返回导致建筑小部件填充可用空间的空白空间 请返回 Container 要返回占用尽可能少空间的空白空间 请返回 Container width 0 0