一、安装
1、下载flutter,配置dart
因为后期使用flutter进行开发,flutter包含dart
下载地址:
https://flutter.dev/docs/development/tools/sdk/releases#windows
flutter官网:
https://flutterchina.club/get-started/install/
最后执行flutter doctor命令:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNIikrBN-1628145530677)(image/01.png)]](https://img-blog.csdnimg.cn/20ddae513f4d4fff89cd3e6231b543eb.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
为了能使用flutter中的dart还需要配置dart的环境变量
2、vscode
在vscode中安装插件,dart(代码提示)和code runner(运行.dart文件)
写好代码后,右击“run code”
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5s3BNOT7-1628145530679)(image/02.png)]](https://img-blog.csdnimg.cn/ae27a7f383064b78959a5999f2de87df.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
二、dart基础
1、入口方法main
有两种定义方式:
main(){
print("hello word!");
}
无返回值:
void main(){
print("hello word!");
}
2、注释
//注释11111
///注释2222
/**
* 注释33333
*/
void main() {
print("hello word!");
}
3、变量
dart是一个强大的脚本语言,可以不预先定义变量类型,自动会进行类型推断
dart中定义变量可以通过var关键字、也可以通过类型来申明变量
注意:var后就不要写类型,写了类型 就不写var
void main() {
var str = "hell";
print(str);
String a = "word";
print(a);
int num = 123;
print(num);
}
命名规则:
- 变量名称必须由数字、字母、下划线和美元符($)组成。
- 注意:标识符开头不能是数字
- 标识符不能是保留字和关键字
- 变量的名字是区分大小写的
- 标识符(变量名称)一定要见名思意。变量名称建议用名次,方法名称建议用动词
4、常量(final和const修饰符)
const值不变,一开始就得赋值
final可以开始不赋值,只能赋一次;而final不仅有const的编译时的特性,最重要的它是运行时常量,并且final时惰性初始化,即在运行时第一次使用前才初始化
void main() {
const PI = 3.1415926;
// PI = 111; //不可以被修改(错误写法)
print(PI);
final P = 3.1415926;
// P = 111; //不可以被修改(错误写法)
print(P);
//final:运行时常量,并且final时惰性初始化,即在运行时第一次使用前才初始化
final time = new DateTime.now();
//const不可以
//const time2 = new DateTime.now();
print(time);
}
5、数据类型
常用数据类型:
A)、Numbers(数量):int、double
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JULcr5Yo-1628145530680)(image/05.png)]](https://img-blog.csdnimg.cn/1aa60c1624674f0cbb8f14d4b2c8c379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
B)、Strings(字符串):String
三个单引号(’)或三个双引号("),可以实现换行
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LtvLrXqj-1628145530682)(image/03.png)]](https://img-blog.csdnimg.cn/5c860be3bbfc4248b58400a28094bec1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
字符串的拼接:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4uV2iVo-1628145530682)(image/04.png)]](https://img-blog.csdnimg.cn/3ed498bbd7ed4e08ae4887f5168f7d9f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
C)、Booleans(布尔):bool
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbXyJ4QQ-1628145530683)(image/06.png)]](https://img-blog.csdnimg.cn/c4d130e360a14df78b6c2559776801a9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2ODMyMw==,size_16,color_FFFFFF,t_70)
D)、List(数组/集合)
? 在dart中,数组是列表对象,所以大多数人只是成他们为列表
void main() {
//第一种 定义List的方式
var l1 = ["张三", 123, true];
print(l1);
print(l1.length);
print(l1[0]);
//第二种 定义List的方式,指定类型
var l2 = <String>["ss", "ls"];
print(l2);
//第三种 定义List的方式 增加数据 通过【】创建的集合他的容量可以变化
var l3 = [];
l3.add("zs");
l3.add("ls");
print(l3);
//第四种 定义List的方式
// var l4 = new List(); 在新版本的dart里面没法使用这个方法,但是在flutter 2.x中还是可以使用到
var l5 = List.filled(2, ""); //创建一个固定长度的集合
print(l5);
l5[0] = "123";
l5[1] = "abc";
print(l5);
var l6 = List<String>.filled(2, ""); //指定类型
}
E)、Maps(字典)
? 通常来说,Map是一个键值对相关的对象,键和值可以是任何类型的对象。每个键只出现一次
void main() {
//第一种 定义Map的方式
Map person = {
"name": "wxb",
"age": 23,
"work": ["ww", "aa"]
};
print(person);
print(person["name"]);
//第二种 定义Map的方式
Map p = new Map();
p["name"] = "ls";
p["age"] = 34;
print(p);
}
F)、is 关键词判断类型
void main() {
var str = "111";
if (str is String) {
print("String");
} else {
print("其他");
}
}
6、运算符
A)、算数运算符
void main() {
int a = 13;
int b = 5;
print(a + b); //加
print(a - b); //减
print(a * b); //乘
print(a / b); //除
print(a % b); //取余
print(a ~/ b); //取整
}
B)、关系运算符
void main() {
int a = 13;
int b = 5;
print(a == b); //等于
print(a != b); //不等于
print(a > b); //大于
print(a < b); //小于
print(a >= b); //大于等于
print(a <= b); //小于等于
}
C)、逻辑运算符
void main() {
//! 取反
bool flag = false;
print(!flag);
//&& 并且 :全部为true的话值为true,否则值为false
bool a = true;
bool b = false;
print(a && b);
// || 或者 :全部为false的话值为false,否则值为true
bool c = true;
bool d = false;
print(c || d);
}
D)、赋值运算符
void main() {
//1、基础赋值运算符 = ??=
int a = 10;
print(a);
//b??=23 表示如果b为空的话把23赋值给b
int b = 10;
b ??= 23;
print(b);
//2、 复合赋值运算符 += -= *= /= %= ~/=
}
7、条件表达式
void main() {
//1、 if else switch case
bool flag = true;
if (flag) {
print("aa");
} else {
print("bb");
}
var sex = 's';
switch (sex) {
case "男":
print("是男");
break;
case "女":
print("是女");
break;
default:
print("错误");
break;
}
//2、 三目运算符
var f = true;
var str = f ? "wo shi true" : "wo shi false";
print(str);
//3、 ??运算符
var a;
var b = a ?? 20; //判断a是否为空,为空的话将20赋值给b
print(b);
}
8、类型转换
A)、Number与String类型之间的转换
//Number类型转换成String类型 toString()
var myNumStr = 1234;
var str1 = myNumStr.toString();
print(str1);
B)、String类型转换成Number类型
void main() {
//String类型转换成Number类型 int.parse() double.parse()
String str = '123';
var myNum = int.parse(str);
print(myNum is int);
//处理异常
String price = '';
var myDouble;
try {
myDouble = double.parse(price);
print(myDouble);
} catch (err) {
print(err);
myDouble = 0;
print(myDouble);
}
}
C)、其他类型转换成bool类型
// isEmpty:判断字符串是否为空
//string
var str = '';
if(str.isEmpty){
print('为空');
}else{
print('不为空');
}
//number
var myNum = 123;
if(myNum == 0){
print('wei true');
}eles{
print('wei false');
}
var myNum2;
if(myNum2 == null){
print('wei kong')
}
var myNum3 = 0/0;
if(myNum3 isNaN){
print('wei NaN');
}
9、循环
A)、for循环
void main() {
for (var i = 0; i < 10; i++) {
print(i);
}
}
B)、while循环
void main() {
var i = 1;
while (i < 10) {
print(i);
i++;
}
}
C)、do while循环
void main() {
var i = 1;
do {
print(i);
i++;
} while (i < 10);
}
while和do while循环区别:
在第一次循环条件不成立的时候,while循环体中是不执行的,但是do while会执行一次(do while无论如何都会执行一次)
D)、break关键字
break语句功能:
? 1、在switch语句中使流程跳出switch解构
? 2、在循环语句中使流程跳出当前循环,遇到break 循环终止,后面代码也不会执行
强调:
? 1、如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句
? 2、在多层循环中,一个break语句只能向外跳出一层
break可以用在switch case中 ,也可以用在for 循环和 while循环中
E)、continue关键字
continue语句的功能:
? 1、只能在循环语句中使用,使本次循环结束,即跳过循环体下面尚未执行的语句,
接着进行下面的代码
? 2、continue可以用在for循环以及while循环中,但是不建议在while中使用,
不小心容易造成死循环
三、集合
1、List
A)、定义list
void main() {
var l1 = ["zs", "ls"];
print(l1);
//指定类型
var l2 = <String>["ss", "qq"];
print(l2);
//通过【】定义的list,可以通过add增加
List l3 = <String>["aa", "qq"];
print(l3);
print(l3.length);
l3.add("cc");
print(l3.length);
//通过List.filled()定义固定长度的list
List l4 = List<String>.filled(2, "");
}
B)、常用属性
1、length 长度?
2、reversed 翻转?
3、isEmpty 是否为空?
4、isNotEmpty 是否不为空
C)、常用方法
1、add() 增加?
2、addAll(['aa','aa']) 增加数组?
3、indexOf 查找。传入具体值,得到索引值(查找不到返回-1)?
4、remove 删除。传入具体值?
5、removeAt 删除。传入索引值?
6、fillRange(start,end,value) 修改?
7、insert(index,value) 指定位置插入?
8、insertAll(index,list) 指定位置插入list?
9、toList() 其他类型转换成List?
10、join() List转换成字符串
eg: l1.join(",") 会输出以“,”作为分割的元素字符串?
11、split() 字符串转化成List
eg: str.split(",") 会以“,”作为字符串的分割符,转为list?
12、forEach 循环?
13、map 通过map修改集合元素
void main() {
//map 方法修改集合中的数据
List l1 = [1, 2, 3];
var newList = l1.map((value) {
return value * 2;
});
print(newList);
print(newList.toList());
//forEach循环
l1.forEach((element) {
print(element);
});
}
2、Set
用set最主要的功能就是去除数组的重复内容
Set是没有顺序且不能重复的集合,所以不能通过索引去获取值
3、Map
映射是无序的键值对:
A)、常用属性
1、keys 获取所有的key值?
2、values 获取所有的value值?
3、isEmpty 是否为空?
4、isNotEmpty 是否不为空
B)、常用方法
1、remove(key) 删除指定key的数据
?2、addAll( {...} ) 合并映射 给映射内增加属性
?3、containsValue(value) 查看映射内的值 返回true / false
4、where、any、every
A)、where
void main() {
//where 返回满足条件的值
List l1 = [1, 2, 3];
var newList = l1.where((value) {
return value > 2;
});
print(newList);
print(newList.toList());
}
B)、any
void main() {
//any 判断是否有满足条件的元素,如果有一个就返回true,如果都不满足就返回false
List l1 = [1, 2, 3];
var falg = l1.any((value) {
return value > 2;
});
print(falg);
}
C)、every
void main() {
//every 判断是否所有元素都满足条件,如果都满足返回ture,否则返回false
List l1 = [1, 2, 3];
var falg = l1.every((value) {
return value > 2;
});
print(falg);
}
|