Android 有人能给我解释一下Builter类在Flatter中做什么吗?
文档非常混乱和模糊。下面是它所说的: 建筑类 柏拉图式小部件,调用闭包以获取其子小部件 以下是我的问题:Android 有人能给我解释一下Builter类在Flatter中做什么吗?,android,ios,flutter,Android,Ios,Flutter,文档非常混乱和模糊。下面是它所说的: 建筑类 柏拉图式小部件,调用闭包以获取其子小部件 以下是我的问题: “柏拉图式”是什么意思 “结束”是什么意思 这门课的目的到底是什么 它基本上将构建小部件的函数转换为小部件 如果您需要传递一个小部件,但只有一个返回小部件的函数,您可以使用Builder小部件 bool bar; Widget createFooOrBarWidget() { if(bar) { return BarWidget(); } return FooWidg
它基本上将构建小部件的函数转换为小部件 如果您需要传递一个小部件,但只有一个返回小部件的函数,您可以使用
Builder
小部件
bool bar;
Widget createFooOrBarWidget() {
if(bar) {
return BarWidget();
}
return FooWidget();
}
Widget build(BuildContext context) =>
Container(child: Builder((context) => createFooOrBarWidget()));
你也可以使用
Widget build(BuildContext context) =>
Container(child: createFooOrBarWidget());
但前者延迟了Foo或Bar小部件的创建,直到实际调用了
build
。在互联网上进行了长时间的深入研究之后,我收集了一些小片段,并将它们组合起来,对Builder类的功能进行了连贯而清晰的解释
术语:
根据官方颤振文件,建筑商类别定义为:
柏拉图式小部件,调用闭包以获取其子小部件
柏拉图的意思是最简单的事情。术语闭包只是lambda函数的另一个名称
目的:
这将是一个冗长的解释,但请容忍我:
在颤振框架中,每个小部件都有一个build方法,该方法接受BuildContext参数:
小部件构建(
构建上下文上下文
) {
…}
我们必须记住,上下文对象由框架自动传递给小部件的构建函数。由于框架会自动处理这一问题,因此任何小部件都没有理由拥有需要接受上下文参数的构造函数或函数(除了构建)
因此,如果您试图将特定的上下文对象传递给子对象,您将无法这样做。不能调用build()并手动传递自己的上下文对象。我的意思是,您可以,但是您将调用构建函数两次:
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Container(),
/// Scaffold doesn't exist in this context here
/// because the context thats passed into 'build'
/// refers to the Widget 'above' this one in the tree,
/// and the Scaffold doesn't exist above this exact build method
///
/// This will throw an error:
/// 'Scaffold.of() called with a context that does not contain a Scaffold.'
floatingActionButton: new FloatingActionButton(onPressed: () {
Scaffold.of(context).showSnackBar(
new SnackBar(
content: new Text('SnackBar'),
),
);
}));
}
上面的代码不起作用。Scaffold.of(context)函数将找不到脚手架,因为:
new Builder(builder: (BuildContext context){ ... });
我们提供了一个关闭:
总结:对于仍然难以理解这个概念的人,让我用更简洁的形式来解释。Builder函数只允许您获取并使用Builder小部件所在的小部件的上下文对象。在上面的示例中,它是newscaffold()小部件。记住,唯一可用的上下文对象是父小部件(Scaffold上方)的上下文对象,因为当前小部件(Scaffold)尚未创建。我希望这能帮助那些还在挠头的人。干杯 简单定义请在您所指的文档中添加lik。嗨,冈特。这里是:还没有关于“柏拉图式”的答案吗?我发现了-()柏拉图式的小部件是“最简单的”嗯。。我想我有了。你能为我确认一个事实吗:每个小部件都有一个构建方法吗?是的,没有
build
就没有小部件。当(重新)构建视图时,颤振在每个小部件上调用build
。好的。得到确认后,我将根据您的信息和23小时的研究,为自己的问题发布一个答案,以找到一个建筑类的清晰解释。给我几分钟时间,我把我的答案贴出来,看看我是否答对了。对不起,耽搁了。我张贴了我的答案。你能帮我再检查一遍吗?你能详细说明一下“但是前者会延迟Foo或Bar小部件的创建,直到实际调用build”吗?我喜欢这两个片段,想知道它们到底有什么不同。嗨,我想这句话可能不正确
new Builder(builder: (BuildContext context){ ... });