数据类型
大约 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
);
}
