有没有办法明确告诉 firebase 动画列表特定小部件的高度应该是多少?在我的例子中,firebase 列表中的每个项目都有一个基于子级数量的可变大小(这是一个评论线程)。每当一个大线程超出视口(viewport)(上方)时,它就会被丢弃并且高度被遗忘,这会导致烦人的阻塞并在尝试向上滚动时失败。
这是我的主题:
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();
}
}
}
}
);
}
)
回复磁贴是一个小部件,用于显示数据并检查它是否有任何子项,如果有则递归。
每当顶部的父回复磁贴离开视口(viewport)时,它就会按预期处理,但当试图将其带回 View 时,它会向右滚动到顶部并且看起来非常跳跃,当更大的线程(有多个子线程)时更糟试图回到 View 中它根本不滚动。
我认为如果 ListView 知道高度,滚动问题就会消失,但我可能错了
更糟糕的情况是,我该如何做到不暴露小部件并且整个线程从一开始就加载?
最佳答案
当用户滚动列表并使用这些异步加载的结果来设置列表项的高度时,您正在执行异步加载。这会导致重建旧项目时出现滚动问题,因为它们的高度在构建时不可用。
您可以尝试将整个线程加载到 Map 中并使用常规 ListView 构建您的小部件。这样所有数据都在内存中,供您在需要时读取。这会在滚动查看新内容(无进度指示器)时带来更好的用户体验,但当数据更改时您不会获得更新,并且您可能会因超长线程而耗尽内存。请记住,FirebaseAnimatedList 无论如何都会在内存中维护初始查询的完整结果列表,就像其他平台上的 Firebase 数据库 UI 一样。
如果您不喜欢该选项,您可以将完成的快照缓存在您可以从中读取的 map 中,这样当滚动回旧图 block 时永远不会显示加载指示器。如果您不实现某种逐出逻辑,您仍然可能会耗尽内存,但在实践中这种情况不太可能发生。
目前还没有办法对 FirebaseAnimatedList 进行分页,但我一直在考虑添加它。
关于firebase - 在 firebase 动画列表中,有没有办法让 firebase 列表在加载之前知道小部件的预期高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479214/
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle