Flutter 什么';常量构造函数和非常量构造函数的区别是什么?

Flutter 什么';常量构造函数和非常量构造函数的区别是什么?,flutter,dart,widget,Flutter,Dart,Widget,我不熟悉颤振,对它的构造感到困惑 例如: 样本1: 样本2: 我删除了样本2中的const和key,样本1和样本2都工作得很好 示例2中是否存在任何潜在风险?当您不希望重建此小部件时,您会使用const构造函数。 常量小部件就像常量pi,它不会改变。 但是,如果您有state,那么您希望在示例2中使用普通构造函数,因为小部件会发生变化,并且不能是常量 因此,当您在有意义的地方使用const时,性能会略有提高(因为它不会被重建) 密钥属性是另一个主题。当您不希望重建此小部件时,可以使用co

我不熟悉颤振,对它的构造感到困惑

例如:

  • 样本1:
  • 样本2:
我删除了样本2中的
const
key
,样本1和样本2都工作得很好


示例2中是否存在任何潜在风险?

当您不希望重建此小部件时,您会使用const构造函数。 常量小部件就像常量pi,它不会改变。 但是,如果您有state,那么您希望在示例2中使用普通构造函数,因为小部件会发生变化,并且不能是常量

因此,当您在有意义的地方使用const时,性能会略有提高(因为它不会被重建)


密钥属性是另一个主题。

当您不希望重建此小部件时,可以使用const构造函数。 常量小部件就像常量pi,它不会改变。 但是,如果您有state,那么您希望在示例2中使用普通构造函数,因为小部件会发生变化,并且不能是常量

因此,当您在有意义的地方使用const时,性能会略有提高(因为它不会被重建)


键属性是另一个主题。

当您在构造函数中使用const时,它是编译时常量,构造函数中给出的所有值都必须是常量


尝试将非常量值赋给const-constructor以查看差异

当您将const与构造函数一起使用时,它是编译时常量,构造函数中给出的所有值都必须是常量

尝试给const constructor赋予非常量值以查看差异

const

  • 带有
    const
    关键字的变量在
    编译时初始化
    并且已在运行时分配
  • 不能在
    类中定义
    常量
    。但是你可以在一个
    功能
  • 对于特定的颤振,构建方法中的所有内容都不会 状态更新时再次初始化
  • const
    在运行时无法更改
何时使用常量?

-

如果您确定在运行代码时不会更改某个值,请使用const:。例如,当您声明一个始终保持不变的句子时。

const

  • 带有
    const
    关键字的变量在
    编译时初始化
    并且已在运行时分配
  • 不能在
    类中定义
    常量
    。但是你可以在一个
    功能
  • 对于特定的颤振,构建方法中的所有内容都不会 状态更新时再次初始化
  • const
    在运行时无法更改
何时使用常量?

-

如果您确定在运行代码时不会更改某个值,请使用const:。例如,当您声明一个始终保持不变的句子时。

class MyContainer extends StatelessWidget {
  final Color color;
  const MyContainer({Key key, this.color}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color,
    );
  }
}
class MyContainer extends StatelessWidget {
  final Color color;
  MyContainer({this.color});

  @override
  Widget build(BuildContext context) {
    return Container(
      color: color,
    );
  }
}