# Dart 基础_常用数据类型
# 概述
1,Dart 是强类型语言,静态类型(如:Java, c#等)
2,面向对象的语言,OOP(如:Python, C++, Objective-C, Java, Kotliin, Swift, C#, Ruby 与 PHP 等)
3,JIT & AOT
- JIT(Just In Time): 即时编译,开发期间,更快编译,更快的重载
- AOT(Ahead Of Time): 事前编译,release 期间,更快更流畅
// main.dart
import "package:flutter/material.dart";
import "package:flutter_app/navigator/data_type.dart";
void main()=>runApp(MyApp());
class MyApp extends StatelessWidget{
Widget build(BuildContext context){
return MaterialApp(
title: "demo",
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: BaseStyles(),
)
}
}
// data_type.dart
import 'package:flutter/material.dart';
class BaseStyles extends StatefulWidget {
_BaseStylesState createState() => _BaseStylesState();
}
class _BaseStylesState extends State<BaseStyles> {
Widget build(BuildContext context) {
_numType();
return Container(
child: Text("常用数据类型"),
);
}
void _numType(){
// ...
}
}
# 常用数据类型
快速新建 dart 文结构 stfuk
=》 new stateful widge
;
按 option
+ enter
选择要引入的依赖;
# 数字 num int double
// 数字类型
void _numType() {
num num1 = -1.0; // 浮点类型 是数字类型的父类
num num2 = 2; // 整型 是数字类型的父类
int int1 = 3; // 只能是整数
double d1 = 1.68; // 双精度
print("num: $num1 num02: $num2 int: $int1 double: $d1");
print(num1.abs()); // 求绝对值 1.0
print(num1.toInt()); // -1
print(num1.toDouble()); // -1.0
}
# 字符串 String
_stringType(){
String str1="字符串1", str2='字符串2';
String str3 = "str1: $str1, str2: $str2";
String str4 = "str1: "+ str1+", str2: "+ str2;
String str5 = "常用数据类型,在控制台输出";
print(str3);
print(str4);
// 常用方法
print(str5.substring(1,5)); // 用数据类 字符串截取
print(str5.indexOf('类型')); // 4 获取指定字符串位置
// startsWith, replaceAll, contains, split
print(str5.startsWith('用', 1)); // true 返回true or false 验证在index 是否以x开头
print(str5.replaceAll('类型', '123')); // 常231addd数据类型,在控制台输出 把 xxx 替换为 xxx
print(str5.contains('用')); // true 是否包含xxx
print(str5.split('用')); // [常, 数据类型,在控制台输出] 从xx分割成数组
}
# 布尔(bool)
_boolType(){
bool success = true, fail = false;
print(success);
print(fail);
print(success || fail);
print(success && fail);
}
# 集合 List Map
# List 集合
_listType(){
print('---_listType---');
// 集合初始化
List list = [1,2,3,'asdfas']; // 泛型 <dynamic>
print(list);
List<int> list2=[];
// list2 = list; // err List<dynamic> is not a subtype of type List<int>
List list3 = [];
list3.add('list3');
list3.addAll(list);
print(list3); // [list3, 1, 2, 3, asdfas]
List list4 = List.generate(3, (index)=>index*2); // 生成函数
print(list4); // [0,2,4]
// 集合遍历的3种方式
for(int i=0;i<list.length;i++){
print(list[i]);
}
for(var o in list){
print(o);
}
// 匿名函数 (){}
list.forEach((e){
print(list.indexOf(i).toString());
print(e);
});
// // list.removeXx, insert, sublist, indexOf 等
// list.removeLast();
// print(list); // [1, 2, 3]
// list.removeAt(0); // 删除 xx 下标的元素,并返回新数组 (如果xx大于本身长度,会报错)
// print(list); // [2, 3]
// list.remove(2);
// print(list); // [3]
list.removeRange(1, 3);
print(list);
list.insert(2, 'adfsad');
print(list);
var a = list.indexOf('asdf');
print(a); // -1
}
# Map 集合
Map 是 key, value 相关联的对象,key 和 value 都可以是任何类型的对象,并且 key 是唯一的,如果 key 重复后面添加的覆盖前面的
_mapType(){
// 定义是时候初始化
Map student = {'name':'小明', 'age': 18};
print(student);
Map ages = {};
student['classname'] ='1年(2)班';
student['bestfriend'] ='小红';
print(student);
// Map 遍历
student.forEach((key,value){
print('$key: $value');
});
Map student02 = student.map((key,value){
return MapEntry(value, key);
});
print(student02);
for(var key in student.keys){
print('$key ${student[key]}');
}
print(student.keys); // (name, age, classname, bestfriend)
print(student.values); // (小明, 18, 1年(2)班, 小红)
print(student.remove('name')); // 小明
print(student); // {age: 18, classname: 1年(2)班, bestfriend: 小红}
print(student.containsKey('age')); // true
print(student.containsKey('ageasda')); // false
}
# 类型转换 && dynamic, var, Object 三者的区别
- dynamic:会使 dart 数据类型检查的失败,不建议使用。可重新赋值新类型
- var:不关心赋值的是何种数据类型,数据类型一旦确定不能修改 关于变量详情,参见
- Object:只能调用 Object 属性,可调用如
tostring()
,hashCode()
方法,dynamic 与 Object 最大区别是类型检查
_tips(){
print('---tips---');
dynamic x = 'hai'; // 会使dart数据类型检查的失败
print(x.runtimeType); // String
print(x);
x=123;
print(x.runtimeType); // int
print(x);
// var 关键字 不关心数据类型
var a = 123;
print(a.runtimeType); // int
print(a);
// a ='adsf'; // err 数据类型不能修改
Object o1='111';
print(o1.runtimeType); // String
print(o1); // Object 只能调用Object属性
o1 = 123;
print(o1.runtimeType); // int
print(o1);
}