Flutter 命名构造函数和私有构造函数

时间:2021-01-20 18:41:01

标签: flutter dart

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

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

2 个答案:

答案 0 :(得分:1)

您可以在 Official Documentationhere 中阅读工厂构造函数。

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

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

答案 1 :(得分:1)

Dart 中具有命名构造函数 背后的主要思想是,您可以为一个类定义多个构造函数。您只能定义一个未命名构造函数,其用法如下:

Foo(...);

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

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

让我们以 Border 中的 Flutter 类为例。 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);