【问题标题】:Does an empty const constructor matter?空的 const 构造函数重要吗?
【发布时间】:2020-08-26 01:31:16
【问题描述】:

这是对

的后续问题

到目前为止,从我所读到的关于 Dart 中的 const 构造函数的内容来看,它确保只分配了相关类的一个对象。理论上,这可以节省分配空间和执行时间。甚至建议在遵循Effective Dart 设计时尽可能应用它。

现在,假设我们有一个无状态小部件Foo

import 'package:flutter/material.dart';

class Foo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text("Hello world");
  }
}

如果不定义显式 const 构造函数,则此小部件不能在 const 上下文中使用。也就是说,下面的sn-p

import 'package:flutter/material.dart';

class Bar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const Foo();
  }
}

是非法的。但是,如果在可预见的将来它没有(也不会有)任何字段,那么将 const Foo(); 添加到 Foo 类是否有好处?

【问题讨论】:

    标签: dart


    【解决方案1】:

    是的,有一个好处。如果可能,您应该声明为 const。

    根据Flutter doc

    尽可能使用 const 小部件,并为小部件提供 const 构造函数,以便小部件的用户也可以这样做。

    好处与拥有默认 vs const 构造函数相同:

    1. 性能 (see)
    2. 您的代码是一致且合理的
    3. 用作注释
    4. 可以在编译开关中使用

    你可以使用Lint默认启用const

    【讨论】:

    • 根据您的性能链接,当有大量小部件要渲染时,确实存在差异。但是,无论是用户注意到的东西还是它是否有任何影响,都是视情况而定的。我的收获是,除非您要处理大量小部件(例如,急切渲染的非常大的列表),否则没有必要。
    • 你能详细说明3.和4.吗?是否记录在 Flutter 文档中?
    • '除非你处理大量的小部件,否则没有必要'显然你比颤振团队更了解,因为你的建议与他们的建议是对称的。
    • 这不是建议。这是基于您的性能链接和 Flutter 文档的主观结论。您对第 3 点和第 4 点的来源是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2019-12-27
    • 2018-08-15
    • 2023-04-07
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多