FlutterBasics - final、const、var、static

238 阅读2分钟

Flutter.png 让我用简单的例子来解释这些关键字的区别:

1. var(变量)

就像一个可以换内容的盒子,但只能放同类型的东西:


var box = '苹果';     // 现在这个盒子只能装字符串

box = '香蕉';        // ✅ 可以,还是字符串

box = 1;            // ❌ 错误,不能放数字进去

2. final(一次性)

像是用胶水封住的盒子,放进去就不能再换了:


final lunch = '炒饭';  // 午餐定好是炒饭了

lunch = '面条';       // ❌ 错误,不能改变了

// 可以在运行时确定值

final now = DateTime.now();  // 获取当前时间

3. const(永久性)

像是工厂里生产出来就固定的东西,从一开始就不能改:


const PI = 3.14;     // 编译时就必须知道值

const name = getName();  // ❌ 错误,因为需要运行才知道值

// 常用于固定不变的值

const appName = 'My App';

const colors = [红色, 蓝色, 绿色];

4. static(共享)

像是班级里的公共财产,所有同学都可以用,不需要特定给某个同学:


class School {

  static String schoolName = '第一中学';  // 学校名字是公共的

  String studentName;                    // 每个学生有自己的名字

  

  void printInfo() {

    print(schoolName);      // 可以直接用学校名

    print(studentName);     // 需要具体到某个学生

  }

}

// 使用 static

School.schoolName;  // 直接用,不需要新建学生

实际例子

class MyApp {
    // var:不推荐用在类属性```
    var count = 0// 不推荐这样写    
    // final:适合只赋值一次的属性
    final String title;

    // const:适合完全固定的值
    static const String VERSION = '1.0.0';

    // static:适合共享的数据
    static int userCount = 0;
    
    
    void example() {
        // var:适合局部变量
        var button = ElevatedButton(...);
        var text = Text('Hello');

        // final:适合不再变化的值
        final user = await getUser();

        // const:适合编译时就知道的值
        const margin = EdgeInsets.all(16.0);
    }
}

简单记忆

  • var: 可以改内容,但类型不能改

  • final: 一次性的,放进去就不能改了

  • const: 从始至终都不变的,必须一开始就知道值

  • static: 大家都能用的,不需要创建对象