gpt4 book ai didi

android - 有人可以向我解释 Builder 类在 Flutter 中的作用吗?

转载 作者:IT老高 更新时间:2023-10-28 12:31:33 26 4
gpt4 key购买 nike

文档非常困惑和模糊。这是它所说的:

生成器类

A platonic widget that calls a closure to obtain its child widget.



以下是我的问题:
  • 他们所说的“柏拉图式”是什么意思?
  • 他们所说的“关闭”是什么意思?
  • 这门课的目的究竟是什么?
  • 最佳答案

    在互联网上进行了长时间的深入研究后,我收集了一些小 fragment 并将它们组合起来,对 Builder Class 的作用进行了连贯而清晰的解释。

    术语:

    根据flutter官方文档,Builder类定义为:

    A platonic widget that calls a closure to obtain its child widget.



    柏拉图的意思是那种最简单的事情。术语闭包只是 lambda 函数的另一个名称。

    用途:

    这将是一个冗长的解释,但请耐心等待:

    在 Flutter 框架中,每个小部件都有一个 构建 接受 的方法构建上下文 范围:

    Widget build ( BuildContext context ) { ... }



    我们必须记住 上下文 对象被传递到小部件的 构建 由框架自动运行。由于框架会自动处理这些,因此任何小部件都没有理由拥有需要接受 的构造函数或函数(除了 build )上下文 范围。

    因此,如果您尝试传递特定的 上下文 反对 child ,你将无法反对。您不能手动调用 build() 并传递您自己的上下文对象。我的意思是,你可以,但你会调用构建函数两次:
  • 您的人工调用。
  • 框架自动调用。

  • 那么,我们如何才能传递一个特定的 上下文 目的?这是 的地方 build 师 类进来了。 的目的 build 师 类只是构建和返回子小部件。这与其他任何小部件有何不同?啊哈! build 师 class 允许您传递特定的 上下文 反对它的 child 。 build 师 class 基本上是您自己设置的构建函数。

    为什么我需要通过特定的 上下文 目的?让我们看一个例子:

    假设我们想将一个新的 SnackBar 小部件添加到其正在返回的新 Scaffold 父小部件中:
     @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) 函数将找不到 Scaffold,因为:
  • 尚未创建 Scaffold 小部件。
  • 传递给构建函数的上下文对象是指父小部件,它不是 Scaffold 小部件。

  • 那么,我们如何让子 SnackBar 小部件访问父 Scaffold 小部件?我们使用 build 师 传递 Scaffold 小部件上下文的类:
     @override
    Widget build(BuildContext context) {
    return new Scaffold(
    appBar: new AppBar(
    title: new Text(widget.title),
    ),
    body: new Container(),
    /// Builders let you pass context
    /// from your *current* build method
    /// Directly to children returned in this build method
    ///
    /// The 'builder' property accepts a callback
    /// which can be treated exactly as a 'build' method on any
    /// widget
    floatingActionButton: new Builder(builder: (BuildContext context) {
    return new FloatingActionButton(onPressed: () {
    Scaffold.of(context).showSnackBar(
    new SnackBar(
    backgroundColor: Colors.blue,
    content: new Text('SnackBar'),
    ),
    );
    });
    }),
    );
    }

    请记住, build 师 类构造函数:

    Builder({Key key, @required WidgetBuilder builder })



    通过将其构建委托(delegate)给通过其构造函数传递的回调函数来创建小部件。

    所以,在代码中:
    new Builder(builder: (BuildContext context){ ... });

    我们提供了一个闭包:
  • 包含 BuildContext 上下文 参数
  • 根据传递的上下文构建并返回子小部件。

  • 基本上,您提供了自己的构建功能。这个闭包中的 BuildContext 上下文参数是 Scaffold 的上下文!呸!

    基本上就是这样。 Flutter 文档根本没有对此进行彻底的解释。我觉得破译古代象形文字比破译 Flutter 文档更容易。

    我希望这对目前正在学习 Flutter 的人有所帮助。

    总结 :对于仍然难以理解这个概念的任何人,让我以更简洁的形式解释。 Builder 函数只是允许您获取和使用 的小部件的上下文对象。 build 师 小部件在。在上面的例子中,它是 新脚手架() 小部件。请记住,唯一可用的上下文对象是父窗口小部件(在脚手架上方)的上下文对象,因为当前窗口小部件(脚手架)尚未创建。我希望能帮助那些仍在摸不着头脑的人。干杯!

    关于android - 有人可以向我解释 Builder 类在 Flutter 中的作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088889/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com