flutter语法

Map

putIfAbsent

查找Map中键为key的值,如果该值存在,则直接返回该值,否则调用方法添加新值,并返回刚添加的值。

Map<String, String> map = {};
print(map.putIfAbsent('name', () => 'Jack'));

构造函数

冒号

: 后面的部分称为初始化列表,为对象设置初始化的值。

多个赋值语句用 , 分隔,支持super关键字和assert断言

User(String name) : name = 'Rose';
// 相当于
User({this.name='Rose'})

命名构造函数

因为dart没有重载的特性,所以使用命名构造函数可以实现类似于重载的效果


class User {
  String? name;
  int? age;

  User();

  User.init() {
    this.name = 'Jack';
    this.age = 18;
  }
}

私有构造函数

以下划线开头的构造函数为私有构造函数,只有在类的内部才可以访问,通常配合factory一起用

factory

工厂方法,必须返回类的一个实例

注意普通的构造函数是不能返回实例的。

factory User() {
    return User._internal();
}

User._internal() {
    this.name = 'Jack';
    this.age = 18;
}

单例模式

class User {
    String? name;
    int? age;

    static final User _user = User._internal();

    factory User() {
        return _user;
    }

    User._internal() {
        print('constructor');
        this.name = 'Jack';
        this.age = 18;
    }

    Map<String, dynamic> toJson() {
        return {'name': name, 'age': age};
    }
    @override
    String toString() => json.encode(this);
}

void main() {
  print(User()); 
  print(User());
  print(User());
}

运行结果:

constructor // 只在第一次实例化的时候执行
{name: Jack, age: 18}
{name: Jack, age: 18}
{name: Jack, age: 18}
posted @ 2022-11-03 08:59  Bin_x  阅读(158)  评论(0编辑  收藏  举报