在 firebase 动画列表中,有没有办法让 firebase 列表在加载之前知道小部件的预期高度?

2024-05-02

有没有办法明确告诉 firebase 动画列表特定小部件的高度应该是多少?就我而言,firebase 列表中的每个项目都有一个基于子级数量的可变大小(它是一个评论线程)。每当一个大线程超出视口(上方)时,它就会被处理并且忘记高度,这会导致在尝试向上滚动时出现烦人的阻塞和失败。

这是我的主题:

new FirebaseAnimatedList(
        defaultChild: new DefaultThreadView(),
        query: ref.child(postKey),
        sort: (a, b) => (a.key.compareTo(b.key)),
        itemBuilder: (context, DataSnapshot snapshot,
            Animation<double> animation) {
          return new FutureBuilder<DataSnapshot>(
              future: ref.child(postKey).child(snapshot.key).once(),
              builder: (BuildContext context,
                  AsyncSnapshot<DataSnapshot> snap) {
                switch (snap.connectionState) {
                  case ConnectionState.none:
                    return new Center(
                        child: new CircularProgressIndicator());
                  case ConnectionState.waiting:
                    return new Center(
                        child: new CircularProgressIndicator());
                  default:
                    if (!snap.hasData) {
                      return new Text('Error: ${snap.error}');
                    }
                    else {
                      //check if this snap is a root node
                      String parent = snap.data.value['parent'];

                      if (parent == this.postKey) {
                        return new replyTile.ReplyTile(
                            snap.data, animation, this.postKey, 0);
                      } else {
                        return new Container();
                      }
                    }
                }
              }
          );
        }

    )

回复图块是一个小部件,用于显示数据并检查它是否有任何子级,如果有则递归。

每当顶部父级回复图块离开视口时,它都会按预期进行处理,但是当尝试将其带回到视图中时,它会向右滚动到顶部并且看起来非常跳跃,每当更大的线程(具有多个子级)试图出现时,情况就更糟返回视图时它根本不滚动。

我认为如果列表视图知道高度,滚动问题就会消失,但我可能是错的

更糟糕的情况是如何使小部件不暴露并且整个线程从一开始就加载?


当用户滚动列表时,您正在执行异步加载,并使用这些异步加载的结果来设置列表项的高度。这会导致重建旧项目时出现滚动问题,因为它们的高度在构建时不可用。

您可以尝试将整个线程加载到地图中并使用常规构建您的小部件ListView。这样,所有数据都在内存中,供您在需要时读取。这将在滚动查看新内容(无进度指示器)时带来更好的用户体验,但当数据更改时您将无法获得更新,并且可能会因异常长的线程而耗尽内存。请记住FirebaseAnimatedList无论如何,都会在内存中维护初始查询的完整结果列表,就像其他平台上的 Firebase 数据库 UI 一样。

如果您不喜欢该选项,您可以将已完成的快照缓存在可以读取的地图中,这样当滚动回旧图块时就不会显示加载指示器。如果您不实现某种驱逐逻辑,您仍然可能会耗尽内存,但在实践中这种情况不太可能发生。

目前还没有办法对 FirebaseAnimatedList 进行分页,但我一直在考虑添加它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 firebase 动画列表中,有没有办法让 firebase 列表在加载之前知道小部件的预期高度? 的相关文章

随机推荐

  • SwiftUI 无法使用 navigationLink 来回导航

    请注意 在 gif 中 一旦我导航并关闭新视图 我就无法返回 这是 SwiftUI 错误还是导航链接的误用 struct ContentView View var body some View return NavigationView N
  • 如何在 iPhone 表格的单元格内显示多行文本?

    我是 iPhone 开发新手 我正在解析 xml 文件并在表格的每一行中显示标题 日期 视图和摘要 摘要的内容很大 因此单元格中只显示前 3 个单词 我增加了行的高度 我的单元格中仍然显示 3 个单词 摘要应如何正确适合单元格并应显示完整内
  • 构建基于纯 JavaScript 的 Web 应用程序(客户端和服务器端)是否有意义? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直认为 JavaScript 是任何 Web 应用程序客户端的一个很好的补充 或者更确切地说 在过去几年中 是一个必须具备的功能 即使当我开
  • 通过 web.config 设置拒绝目录中的所有文件

    作为测试 我尝试使用 web config 通过以下方式控制安全性 拒绝访问目录中除特定文件之外的所有文件 允许访问目录中除特定文件之外的所有文件 所以我设置 web config 如下
  • SWT - 表查看器 - 隐藏列并从列中获取值

    我正在尝试从表中的数据创建一个数组列表 我需要从可见列中获取值 但我还需要从表中不可见的列中获取值 将 SWT 与表查看器一起使用 我不知道如何不显示表中的列 我也不知道如何通过指定列名从表中提取数据 我一直使用 Swing 所以我一直使用
  • 有没有办法离线将多个 Plotly HTML 文件合并/嵌入到一个页面/HTML 文件中?

    我正在尝试将多个图表合并成一个 HTML 报告来发送 问题是我真的不认为子图是最好的主意 因为图表相对不相关 不同的 X Y 轴 我所需要做的只是将图表附加到 1 个 HTML 文件中 有一个指南解释了如何使用绘图 URL 来完成此操作 但
  • Django 管理中的嵌套内联?

    好吧 我有一个相当简单的设计 class Update models Model pub date models DateField title models CharField max length 512 class Post mode
  • _mm256_fmadd_ps 比 _mm256_mul_ps + _mm256_add_ps 慢?

    我有一个图像处理算法来计算a b c d与AVX 伪代码如下 float a new float N float b new float N float c new float N float d new float N assign va
  • CSS3 过渡缩放但不平移

    我在任何地方都找不到这个问题的答案 可能是因为它不存在 但无论如何 是否可以独立定义平移和缩放的转换 而不是定义 transition property transform 现在我得到了以下定义 logo position absolute
  • spring boot feign 客户端获取 HTTP 404

    我目前正在检查如何在我的项目之一中使用 Feign 作为声明式 REST 客户端 以下是假客户端 FeignClient name SEARCHCABMS configuration AppFeignConfiguration class
  • AWS Athena 扁平化来自嵌套 JSON 源的数据

    我想从 Athena 中的嵌套 JSON 创建一个表 描述的解决方案here http docs aws amazon com athena latest ug json html使用 hive Openx JsonSerDe 等工具尝试在
  • Leiningen 中的本地依赖项无需创建 Maven 存储库?

    我正在构建一个 Compojure Web 应用程序 我希望它使用我编写的另一个 Clojure 项目中的函数 我对 Maven 一点也不熟悉 据我所知 它的学习曲线非常陡峭 很遗憾 一切 https stackoverflow com q
  • 如何在 PHP 中运行 ffmpeg 命令

    我需要在 PHP 中运行 ffmpeg 命令 但是 php ffmpeg 不再支持最新版本并且已经过时 我可以知道在网络文件中运行 ffmpeg 命令的替代方法吗 PHP Javascript jQuery 我尝试exec and shel
  • 将对象数组作为请求中的 url 参数传递

    我需要将一个对象数组 每个对象有 2 个字段 作为 http 请求的 url 中的参数 我该怎么做以及这个链接应该是什么样子 您可以使用您的结构创建一个 xml 即一个对象数组 每个对象都有两个字段 然后将其转换为字符串 如下所示 举个例子
  • 如何对 Grails 应用程序进行并发修改测试

    我想运行测试来模拟用户同时修改 Grails 应用程序的某些数据 我可以使用任何插件 工具 机制来有效地做到这一点吗 它们不必是特定于 grails 的 应该可以并行触发多个操作 我更愿意在功能级别上运行测试 到目前为止我正在使用 Sele
  • h 文件中声明的 c++ 静态数组给出警告“已定义但未使用”

    我对以下内容感到好奇 我在头文件中声明了一个简单的 C 数组 如下所示 static int userCardsIndexes INITIAL CARDS NUMBER 0 1 8 9 16 17 它给了我很多警告 userCardsInd
  • 从 Glassfish 取消部署 Grails 应用程序会发生类不变性违规

    我有一个在 Glassfish 中运行的 Grails 应用程序 但是当我取消部署时 它会出现 违反类不变性 快速查看堆栈跟踪并在网络上搜索报告 这是 Log4j 的问题 我当时使用的是最新的log4jlog4j 1 2 16 jar 任何
  • aria-live 和 JAWS

    我正在尝试让 aria live 区域与 JAWS 11 和 IE8 一起正常工作 使用下面的代码 我可以让 JAWS 在单击按钮时宣布新值 但行为不是我所期望的 本例的 JSFiddle http jsfiddle net fLzhR
  • 带有多个嵌入图像的 VB.NET 电子邮件

    请有人给我一些关于如何发送包含多个嵌入图像的电子邮件的指示 我可以发送一封基本电子邮件 也可以使用 AlternateView 发送一封带有单个嵌入图像的电子邮件 在 bodyText 中作为 XElement 我有 img src 然后我
  • 在 firebase 动画列表中,有没有办法让 firebase 列表在加载之前知道小部件的预期高度?

    有没有办法明确告诉 firebase 动画列表特定小部件的高度应该是多少 就我而言 firebase 列表中的每个项目都有一个基于子级数量的可变大小 它是一个评论线程 每当一个大线程超出视口 上方 时 它就会被处理并且忘记高度 这会导致在尝