什麼是 const

在 Dart 和 Flutter 中,const關鍵字用於創建編譯時期常量。這意味著在編譯時期就確定了對象的值,並且在運行時期無法更改。

const  的優點

1. 提升效能

使用  const  可以提升效能,因為常量對象在內存中只會創建一次,並且在多個地方重用。這減少了內存分配和垃圾回收的開銷。

2. 保證不可變性

const  保證對象在創建後無法更改,這有助於避免意外的狀態變更,並提高代碼的穩定性和可預測性。

使用  const  的注意事項

1. 所有字段必須是  final

當你為一個類定義  const  構造函數時,該類中的所有字段必須是  final,因為  const  構造函數要求對象在編譯時期確定所有屬性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyButton extends StatelessWidget {
final String text;
final VoidCallback onPressed;

const MyButton({
super.key,
required this.text,
required this.onPressed,
});

@override
Widget build(BuildContext context) {
return const Placeholder();
}
}

2. 嵌套的  const

如果一個  const  對象包含其他對象,這些對象也必須是  const。這樣可以確保整個對象樹在編譯時期都是常量。

1
2
3
4
5
const myList = [
const Text('Item 1'),
const Text('Item 2'),
const Text('Item 3'),
];

3. 使用  const  構造函數

在 Flutter 中,許多 widget 可以使用  const  構造函數來創建不可變的 widget 樹。這有助於提高效能,因為常量 widget 不需要重新構建。

1
2
3
4
5
6
7
8
9
10
11
12

@override
Widget build(BuildContext context) {
return const Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: Center(
child: Text('Hello, World!'),
),
);
}

4. 使用  const  關鍵字

在創建常量對象時,確保在構造函數前添加  const  關鍵字。這樣可以明確表示該對象是常量。

1
2
3
4
5
6
const myButton = MyButton(
text: 'Click Me',
onPressed: () {
print('Button Pressed!');
},
);