当前位置: 首页 > 面试题库 >

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

韩英锐
2023-03-14
问题内容

有没有一种方法可以明确告知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();
                      }
                    }
                }
              }
          );
        }

    )

回复磁贴是一个小部件,用于显示数据并检查其是否有子级以及是否递归。

每当顶级父答复图块离开视口时,它都会按预期方式放置,但是当尝试使其返回视图时,它将右滚动到顶部并看起来非常跳跃,甚至在尝试使用更大的线程(有多个子代)时更糟回到视图中,它根本不会滚动。

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

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


问题答案:

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

您可以尝试将整个线程加载到Map中,并使用Regular来构建窗口小部件ListView。这样,所有数据都存在于内存中,供您在需要时读取。滚动查看新内容(无进度指示器)时,这会带来更好的用户体验,但是当数据更改时,您将不会获得更新,并且对于超长线程,可能会用光内存。请记住,FirebaseAnimatedList无论如何,它都会在内存中维护初始查询的完整结果列表,例如其他平台上的Firebase数据库UI。

如果您不喜欢该选项,则可以将完整的快照缓存在可以从中读取的地图中,这样在回滚到旧图块时就永远不会显示加载指示符。如果不实现某种驱逐逻辑,您仍然可能会用完内存,但是在实践中不太可能发生这种情况。

目前还没有分页FirebaseAnimatedList的方法,但是我一直在考虑添加它。



 类似资料:
  • 问题内容: 我想从数据库中的表中获取列名列表。使用编译指示,我会得到一个元组列表,其中包含很多不需要的信息。有没有办法只获取列名?所以我最终可能会遇到这样的事情: [Column1,Column2,Column3,Column4] 之所以绝对需要此列表,是因为我想在列表中搜索列名并获取索引,因为很多代码中都使用了索引。 有没有办法得到这样的清单? 谢谢 问题答案: 您可以使用sqlite3和pep

  • 在Surefire插件中,您有一个文件(或regex)的排除列表,如下所示: 我想在排除列表中添加一堆与regex不匹配的文件。这个列表大约有200个文件(一个古怪的集合)。我想从Maven的外部文件中添加这些文件。 我认为使用maven properties插件有一种方法可以做到这一点。不过,我看不出这将如何将变量加载到列表中。 有没有办法从文件中加载排除列表?

  • 我正在开发一个反应原生应用程序并使用Firebase fiRecovery作为集中式数据库。在将用户数据放在firest之前,我正在使用crypto js加密数据。现在我想在数据库中搜索,问题是数据已加密,当我再次尝试加密相同的数据时,crypto js会创建不同的加密数据。有没有可能在Firebase中搜索加密数据,而无需在移动应用程序中加载数据然后解密它?

  • 2)当前以美国为中心的托管是否影响英国等地的性能?例如,如果有人导航到我在伦敦的web应用程序,那么调用GCP云功能的网页是否位于美国,而GCP云功能反过来获取位于伦敦等地的数据?

  • 有办法看到所有通过Firebase发送的通知吗? 我在文件或其他地方找不到任何东西。 如果可以在控制台上实现,那就太棒了,但是HTTP也可以!有什么想法吗?

  • 问题内容: 我想一次从redis列表中弹出所有列表项。 我不想在列表为空时调用或方法,因为它似乎多次无效地将请求发送到。 我也知道我可以使用方法获得所有列表,但不能弹出项目。 你能建议我吗? 我只想和清单中的项目一个请求即可。 问题答案: 正如Itamar Haber所说,请使用lrange和del。在管道模式下,它将作为单个命令完成。

  • 问题内容: 我有两个长度相同的列表对象,并且要渲染互补数据,有没有一种方法可以同时渲染两个列表对象。 或类似的东西? 问题答案: 如果两个列表的长度相同,则可以在视图中作为模板上下文返回,从而生成一个二值元组列表。 例: 然后,您可以在模板中编写: 另外,在此处查看有关模板标记的Django文档。它提到了使用它的所有可能性,包括漂亮的示例。

  • 在我的Firebase帐户中,我有大约40个项目。 在https://www.fabric.io/firebase_migration/apps页面。 我在那部分。 null 在这一节里。 “所有其他FABRIC应用程序” 我还有3个Android应用程序 Fabric应用程序与匹配的Firebase应用程序是如何工作的? 问候