【发布时间】:2021-01-20 18:41:01
【问题描述】:
什么是命名构造函数,Flutter中的私有构造函数?
这些在 Flutter 中的使用场景是什么?
【问题讨论】:
什么是命名构造函数,Flutter中的私有构造函数?
这些在 Flutter 中的使用场景是什么?
【问题讨论】:
在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);
【讨论】:
您可以在Official Documentation 和here 中阅读有关工厂构造函数的信息。
在您的情况下,createInstance 是一个私有构造函数,只能在 DatabaseHelper 类中使用。命名构造函数可用于返回创建(缓存)的实例(性能)。
此外,Google 团队还创建了指南,用于向其他平台开发者介绍 Dart。你可以在this页面上找到Intro to Dart for Java Developers之类的教程。
【讨论】: