我正在尝试了解有关 BuildContext 和 Scaffold.of() 的更多信息。
我了解到,当您显示 SnackBar 时,您通常需要添加一个 Builder 以获取您添加的脚手架“下”的上下文。
因此:
class MyScreen extends StatelessWidget {
build(BuildContext context) {
return Scaffold(
body: Builder(
builder: (context) =>
RaisedButton(
child: Text('push me'),
onPressed: () => Scaffold.of(context).showSnackBar(
SnackBar(content: Text('this will work'))),
),
));
}
}
我的问题是:如果 Scaffold.of() 获得最近的祖先,它通常不应该最终找到部件树更高的东西,例如SplashScreen 脚手架?
当我们拿走构建器并创建这个不正确的代码时:
class MyScreen extends StatelessWidget {
build(BuildContext context) {
return Scaffold(
body: RaisedButton(
child: Text('push me'),
onPressed: () => Scaffold.of(context).showSnackBar(
SnackBar(content: Text('broken'))),
),
));
}
}
然后我们得到标准错误
Scaffold.of() 在不包含脚手架的上下文中调用。
我/flutter (7750)
从传递给 Scaffold.of() 的上下文开始,找不到 Scaffold 祖先。
即使 BuildContext 中没有直接父 Scaffold,怎么可能根本找不到 Scaffold 祖先(例如 Grandparent 祖先)?我的应用程序中的所有先前页面都有脚手架,它们是否不再位于小部件树中?
我知道如果它找到一个 Scaffold 并呈现 SnackBar 我们将无法看到它,但我仍然不明白它为什么找不到。也许我误解了“祖先”的意思。
谢谢
最佳答案
BuildContext 表示一个特定小部件在小部件树中的位置。
因此,根据您使用的 BuildContext,调用 Scaffold.of(context) 的行为可能会有所不同。
在您的以下示例中:
class MyScreen extends StatelessWidget {
build(BuildContext context) {
return Scaffold(
body: RaisedButton(
child: Text('push me'),
onPressed: () => Scaffold.of(context).showSnackBar(
SnackBar(content: Text('this will work'))),
),
),
);
}
}
在这里,您使用的是 MyScreen 的 BuildContext。问题是 MyScreen 是创建 Scaffold 的小部件。因此,MyScreen 是 Scaffold 的祖先,无法通过 Scaffold.of(context) 访问它。
关于flutter - Scaffold.of 会找到远距离的 widget anestors 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705904/
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====
我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot
我使用的第一个解析器生成器是Parse::RecDescent,它的指南/教程很棒,但它最有用的功能是它的调试工具,特别是tracing功能(通过将$RD_TRACE设置为1来激活)。我正在寻找可以帮助您调试其规则的解析器生成器。问题是,它必须用python或ruby编写,并且具有详细模式/跟踪模式或非常有用的调试技术。有人知道这样的解析器生成器吗?编辑:当我说调试时,我并不是指调试python或ruby。我指的是调试解析器生成器,查看它在每一步都在做什么,查看它正在读取的每个字符,它试图匹配的规则。希望你明白这一点。赏金编辑:要赢得赏金,请展示一个解析器生成器框架,并说明它的
我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://
我是RoR的新手,我正在学习MichaelHartl的教程(所以请随意更正我在您认为合适的地方使用的术语)。在第2章中,我通过运行以下行创建了一个Users表:$railsgeneratescaffoldUsername:stringemail:string$bundleexecrakedb:migrate然后,我运行了下面的代码来尝试创建一个Microposts表(但是,我拼错了没有“r”的Micropost!)...$railsgeneratescaffoldMiropostcontent:stringuser_id:integer$bundleexecrakedb:migrate
我创建了一个文件,这样我就可以在lib/foo/bar_woo.rb中的许多模型之间共享一个方法。在bar_woo.rb中,我定义了以下内容:moduleBarWoodefhelloputs"hello"endend然后在我的模型中我正在做类似的事情:defMyModel解释器提示它期望bar_woo.rb定义Foo::BarWoo。《使用Rails进行敏捷Web开发》一书指出,如果文件包含类或模块,并且文件使用类或模块名称的小写形式命名,那么Rails将自动加载文件。因此我不需要它。定义代码的正确方法是什么,在我的模型中调用代码的正确方法是什么? 最佳答案
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT