跳至主要內容

数据类型

chanchaw大约 2 分钟dart

所有类型演示

// 常用数据类型
void main(){
  // _numType();
  // _stringType();
  // _booleType();
  // _listType();
  _mapType();
}
_numType(){
  num num01 = 1.3; // num 是数字类型的父类型,其下还有 int 和 double
  int i01 = 3; // 整型
  double d01 = 2.2; // 双精度浮点类型
  print("num01:$num01, i01:$i01, d01:$d01");

  int i02 = num01.toInt();
  print("i02:$i02");
}

_stringType(){
  String aa = "中国";
  String aa01 = '单引号也可以';
  print("double:$aa, single:$aa01");
}

_booleType(){
  bool success = true, fail = false;
  print('success:$success, fail:$fail');
}

_listType(){
  List list = [1,2,3,'我是集合'];
  print(list);

  List<String> list01 = ['我','是','中华'];
  print(list01);

  for(int i=0;i<list.length;i++){
    print(list[i]);
  }

  print('====== for in遍历 ======');
  for(var item in list){
    print(item);
  }
}

_mapType(){
  Map<String,String> map = {'name':'张三','grade':'material'};
  print(map);

  Map ages = {};
  ages['张三'] = 12;
  ages['李四'] = 14;
  print(ages);

  print('map foreach');
  ages.forEach((key,value){
    print('key:$key,value:$value');
  });
}

/**
 * dynamic,var,object
 * 1. dynamic 是 dart 所有数据类型的基础类型,低位等同于 java 中的 Object。通常不会直接使用它,使用它定义的变量会被关闭类型检查
 *    即编译时不会报错,但是运行时可能报错
 * 2. var 定义的变量表示我不关心变量的数据类型,由运行时做类型判断
 * 3. Object 是 dart 中所有对象的基类,Object o = x; 不管 o 具体是什么类型,都可以调用 o.toString() 和 o.hashCode()
 *    因为 Object 实现了这两个方法,那么它其下的所有子类都有该方法。
 */

类型转换

dynamic转Map<String,dynamic>

从后端请求来的数据类型如 List<Map<String,Object>> 时要通过 fromJson 转换为实体类的属性数据时需要强制转换类型。如下面代码中的第二行,从后端请求来的数据是对象类型,所以使用 Map<String,dynamic> 接受,其中 dynamic 相当于 java 中的 Object,其中属性 data 的实际类型是对象集合 List<SearchModelItem>

factory SearchModel.fromJson(Map<String,dynamic> map){
    // 如果 List<Map<String,dynamic>> mapList = map['data'] 会报错
    List<Map<String,dynamic>> mapList = (map['data'] as List?)?.cast<Map<String,dynamic>>() ?? [];
    List<SearchModelItem> modelList = [];

    for(var item in mapList){
        SearchModelItem obj = SearchModelItem.fromJson(item);
        modelList.add(obj);
    }
    return SearchModel(
        keyword: map['keyword'],
        success: map['success'],
        data: modelList
    );
}