前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是Dart构造函数拆分

什么是Dart构造函数拆分

作者头像
睡觉谁叫
发布2022-12-22 08:48:30
3760
发布2022-12-22 08:48:30
举报
文章被收录于专栏:Flutter性能监控Flutter性能监控

一.背景

最近看rollbar_flutter | Flutter Package源码发现有类似Class.new写法,查了下相关用法,总结下构造函数拆分的知识点。

二. 实例代码

代码语言:javascript
复制
class User {
  User();
  final String name = "MisterX";
  final String email = "misterx@gmail.com";
}

void main() {
  //-----------
  //这里User.new不是很明白
  //-----------
  const x = User.new;
  final z = x();
  print(z.email);
}

三. 函数拆分

可以使用函数名称创建一个函数对象,该对象指向另外一个对象的函数。如下示例中

  1. m.greet函数创建了一个函数对象g;
  2. g指向了另外一个函数forEach的入参函数。
代码语言:javascript
复制
class Greeter {
  final String name;
  Greeter(this.name);

  void greet(String who) {
    print('$name says: Hello $who!');
  }
}

void main() {
  final m = Greeter('Michael');
  final g = m.greet;
  g('Leaf');

  print('========1=========');
  ['Lasse', 'Bob', 'Erik'].forEach(m.greet);

}

四. 构造函数拆分(也称为构造函数指针)

.new is a way to pass a reference to the constructor. It doesn't create a new class. It's just the same default constructor of the class. This is also called a constructor tear-off. It was introduced in Dart 2.15.

解读:

  1. .new是类的方法,不是对象方法。
  2. 不会创建新类。
  3. 返回值是类的构造函数, 注意是函数。
  4. Dart2.15 引入。

五. 应用

1. Flutter中简洁快速构建控件

代码语言:javascript
复制
class FruitWidget extends StatelessWidget {
  const FruitWidget({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: ['Apple', 'Orange'].map(Text.new).toList());
  }
}

2. 减少没必要的静态工厂方法

Untitled.png
Untitled.png
Untitled 1.png
Untitled 1.png

六.参考链接

  1. flutter - What does Class.new do in Dart - Stack Overflow
  2. Announcing Dart 2.15. Fast concurrency, constructor… | by Michael Thomsen | Dart | Medium
  3. https://github.com/rollbar/rollbar-flutter
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.背景
  • 二. 实例代码
  • 三. 函数拆分
  • 四. 构造函数拆分(也称为构造函数指针)
  • 五. 应用
    • 1. Flutter中简洁快速构建控件
      • 2. 减少没必要的静态工厂方法
      • 六.参考链接
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档