什么是命名构造函数,Flutter 中的私有构造函数?
这些在 Flutter 中使用的场景是什么?
答案 0 :(得分:1)
您可以在 Official Documentation 和 here 中阅读工厂构造函数。
就您而言,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);