如果不会改变变量, 那么使用 final 或者 const:

    • final 变量只会被设置一次, 在运行时初始化
    • const 变量是编译时常量
    1. final name = 'Bob'; // Without a type annotation
    2. final String nickname = 'Bobby';
    3. const bar = 1000000; // Unit of pressure (dynes/cm2)
    4. const double atm = 1.01325 * bar; // Standard atmosphere

    如果一个 const 变量是 class 层的, 那么必须使用 static const 来声明:

    1. class A {
    2. static const a = 4;
    3. }

    使用 const “创建”而非”声明” 一个值, :

    1. var foo = const [];
    2. final bar = const [];
    3. const baz = []; // Equivalent to `const []`

    以 const 创建的变量, 比如上面的 foo, 是可以赋新值的:

    1. foo = [1, 2, 3]; // Was const []

    在 dart 2.5 以后, 可以使用 type checks/casts (is 和 as), collection if, spread operators (… and …?) 创建 const:

    • is: 类型检查
    • as: 类型转换
    • collection if: 如果 if 后的 () 中的表达式为真, 那么才初始化
    1. // Valid compile-time constants as of Dart 2.5.
    2. const Object i = 3; // Where i is a const Object with an int value...
    3. const list = [i as int]; // Use a typecast.
    4. const map = {if (i is int) i: "int"}; // Use is and collection if.
    5. const set = {if (list is List<int>) ...list}; // ...and a spread.

    Lists, Maps, Classes 的创建 const 值请看对应章节.

    创建 list 常量:

    1. var constantList = const [1, 2, 3];
    2. // constantList[1] = 1; // Uncommenting this causes an error.

    创建 Set 常量:

    1. final constantSet = const {
    2. 'fluorine',
    3. 'chlorine',
    4. 'bromine',
    5. 'iodine',
    6. 'astatine',
    7. };
    8. // constantSet.add('helium'); // Uncommenting this causes an error.

    创建 Map 常量:

    1. final constantMap = const {
    2. 2: 'helium',
    3. 10: 'neon',
    4. 18: 'argon',
    5. };
    6. // constantMap[2] = 'Helium'; // Uncommenting this causes an error.