【问题标题】:Flutter named constructor and private constructor [closed]Flutter命名构造函数和私有构造函数[关闭]
【发布时间】:2021-01-20 18:41:01
【问题描述】:

什么是命名构造函数,Flutter中的私有构造函数?

这些在 Flutter 中的使用场景是什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    Dart 中具有命名构造函数 的主要思想是,您可以为一个类定义多个构造函数。你只能定义一个未命名的构造函数,它的用法是这样的:

    Foo(...);
    

    但是,如果您想要实例化Foo 的其他方法怎么办? 命名构造函数可以让你这样做:

    Foo.bar(...);
    Foo.baz(...);
    

    我们以Flutter 中的Border 类为例。 Border 提供了四个构造函数(一个未命名,三个命名)。

    Border                   // unnamed
    
    Border.all               // named
    Border.fromBorderSide    // named
    Border.symmetric         // named
    

    每个构造函数都提供了一种更简单的方法来自定义Border。例如,Border.all 构造函数将一组参数应用于另一个小部件的整个边框集(左边框、上边框、右边框和下边框)。因此,对于Border 类,这些构造函数提供了一种更具体、更轻量级的创建边框的方式。

    然后我们可以考虑一个示例,说明何时可能需要在未命名版本上使用命名构造函数。假设我们有表示要在小部件内显示的新闻故事的数据:

    未命名的构造函数可能如下所示:

    Story({
      this.headline,
      this.publisher,
      this.publicationDateTime,
    });
    

    这适用于一般用途,但如果您还希望能够将来自 API 的 JSON 响应传递给它怎么办?我们可能要考虑为此使用命名构造函数,以便它可以处理已解析和未解析的数据。

    Story.fromJSON(this.jsonData);
    

    【讨论】:

      【解决方案2】:

      您可以在Official Documentationhere 中阅读有关工厂构造函数的信息。

      在您的情况下,createInstance 是一个私有构造函数,只能在 DatabaseHelper 类中使用。命名构造函数可用于返回创建(缓存)的实例(性能)。

      此外,Google 团队还创建了指南,用于向其他平台开发者介绍 Dart。你可以在this页面上找到Intro to Dart for Java Developers之类的教程。

      【讨论】:

        猜你喜欢
        • 2011-02-08
        • 1970-01-01
        • 2013-08-26
        • 2011-04-20
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-16
        相关资源
        最近更新 更多