素材下载原地址

素材下载原地址2022 年 9 月重新录制的 Flutter 教程_Dart Flutter 入门实战系列视频教程- 支持 Flutter3.x_IT 营 (itying.com)

Dart Flutter 网盘下载地址:https://pan.baidu.com/s/1gRxupvp3I3u7MruJ-RIw0w

提取码:abcd

Dart 介绍:

flutter

官网:https://dart.dev

Dart 是由谷歌公司开发的计算机编程语言,他可以被用于 Web,服务器,移动应用和物联网等领域的开发。

Dart 诞生于 2011 年,号称要取代 javascippt,但是过去的几年中一直不温不火,直到 Flutter 的出现现在才被人们重新重视。

要学 Flutter 的话就必须先学会 Dart.

官方文档:

windows (推荐):

需要翻墙

2022 年 9 月重新录制的 Flutter 教程_Dart Flutter 入门实战系列视频教程- 支持 Flutter

3.x_IT 营 (itying.com)

https://pan.baidu.com/s/1gRxupvp3I3u7MruJ-RIw0w

Dart 介绍:

https://dart.dev

Dart 环境搭建:

https://dart.dev/get-dart

http://www.gekorm.com/dart-windows

安装完成后 windows 键盘+r

输入 cmd

dart —version 回车

安装完成!

两种安装方式

1.命令行(不推荐)

2. 安装

vscoad 扩展安装:

1.搜索 Dart 安装 🆗

2.搜索 Code Runner 安装 🆗

http://www.gekorm.com/dart-windows

出现上面这种情况可能是 dart sdk 没有安装好 或者是 dart 和 Code Runner 没有安装好,如若不然重启 vs

coade 或者重启电脑。

完美解决 🎊

dart 文件是以.dart 结尾的 所有执行文件都要写到入口方法里面

学习笔记—dart

通过 var 定义的变量,会自动的推断类型

Dart 初学

入口方法的两种定义方式

1 // 第一种定义方式
1
2
3
4
5
6
7
8
2 main () {
3 print('你好 dart');
4 }
1 // 第二种定义方式
2 //表示main方法没有返回值
3 void main(){
4 print(new DateTime.now()); // 打印当前时间
5 }

注释方法

1 /*
2 这里是代码
3 */
4
5 ///这也是一个注释
6
7 // 注释

定义变量

1
2
3
1 void main(){
2 var str='dj最牛!'; //通过var关键词定义一个变量
3 print(str); // 打印出这个变量

dart 提供的类型关键词来定义变量

字符串

数字类型

var string int 定义的变量类型有什么不一样?

var 可以自动推断

4 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 void main(){
2 var myNum=123;
3 print(myNum);
4 // 打印出num
5 }
1 void main(){
2 // 定义了一个String类型的变量
3 String str='你好beautiful girl';
4 print(str);
5 }
1 void main(){
2 int myNum=20220603;
3 print(myNum);
4 }
1 void main(){
2 var str=''; // 会自动检测出类型是string
3 str=123; // 但是赋值的是数字类型,所以运行会报错
4 print(str);
5 }

String 定义的类型必须是 string,不然会报错

int 定义

dart 里面有类型校验

1.变量名称必须由数字,字母,下划线和美元符号($)组成

2.注意:标识符开头不能是数字

3.标识符不能是保留字和关键字

4.变量的名字是区分大小写的如:age 和 Age 是不同的变量,在实际运用中,不要用一个英文字母的大

小写充当两个变量

5.标识符(变量名称)一定要见名识意:变量名称建议用名词,方法名称建议用动词

自定义的变量可以修改的

1
2
3
4
5
6
7
8
9
1 void main(){
2 String str=20220603; //这个是数字类型,运行会报错
3 String str='20220603'; //这样不会报错
4 print(str);
5 }
1 void main(){
2 int myNum=20220603;
3 print(myNum);
4 }

Dart 命名规则

1
2
3
4
5
1 void main(){
2 var str='this is a str';
3 str='我行的!';
4 print(str);
5 }

final 可以开始不赋值 只能赋值一次;而 final 不仅有 const 的编译时常量的特性,最重要的是它是运行

时常量,并且 final 是惰性初始化,即在运行时第一次使用前才初始化。

打印当前时间

字符串定义的几种方式

Dart 常量

final 和 const 修饰符

//const 常量

1
2
3
4
5
1 void main() {
2 const PI = 3.14159; //const 关键词定义常量
3 PI = 3.215; //修改无效,错误写法
4 print(PI);
5 }

// final 常量

1
2
3
4
5
6
7
8
9
10
11
12
1 void main(){
2 final PI=3.14159;
3 PI=2022; //定义错误,不可以这样
4 print(PI);
5 }
1 void main(){
2 final a=new DateTime.now(); // 2022-12-28 22:25:54.
3 const a=new DateTime.now(); //错误,
4 print(a);
5 }
1 void main() {
2 // 1. 字符串定义的几种方式

String 定义的类型

三个单引号,三个双引号的

字符串的拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
3 var str1 = '我是str1,夏dj最美!';
4 var str2 = "我是str2,我同意str1"; //成对出现
5 print(str1);
6 print(str2);
7 }
1 void main(){
2 String str1='this is str1';
3 String str2="this is str2";
4 print(str1);
5 print(str2);
6 }
1 void main() {
2 String str1 = '''hello
3 hi
4 夏dj最美''';
5 String str2 = """你好
6 夏dj美不美?
7 美!""";
8 print(str1);
9 print(str2);
10 }
11
1 void main() {
2 String str1 = '夏dj是世界上';
3 String str2 = "最好的好朋友";
4 print('$str1 $str2');
5 // print(str1 + str2);

1. int 整型

2. double 浮点型

3. 运算符 + - * / 加减乘除

bool 值 true/false

6 }

Dart 数值类型

1
2
3
4
5
6
7
8
9
10
11
12
13
1 void main() {
2 // 1. int 只能是整数
3 int a = 2022;
4 // a = 2.0; 这样会出错
5 a = 2019;
6 print(a);
7 // 2. double 带小数点 如果修改为整数,会带.0小数点
8 double b = 13.14;
9 b = 2023;
10 print(b);
11 c=(b-a)*a;
12 print(c);
13 }

Dart 数值类型:布尔类型

1
2
3
4
5
6
7
8
9
1 void main() {
2 // 1. bool
3 bool flag1 = true;
4 print(flag1);
5 bool flag2 = false;
6 // flag2 = 123; //错误的
7 print(flag2);
8 }
9

// 1. 第一种定义 list 的方式

// 2. 第二种定义 list 的方式 指定类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 void main() {
2 var a = 2019;
3 // int b = 2019;
4 double b = 2019;
5 if (a == b) {
6 print('a=b');
7 print('$a $b');
8 } else {
9 print('a!=b');
10 }
11 }
1 void main() {
2 var flag = true;
3 if (flag) {
4 print('真'); // 打印出 真
5 } else {
6 print('假');
7 }
8 }

Dart 数据类型:list(数组/集合)

1
2
3
4
5
6
1 void main() {
2 var l1 = ['你哈哈', 22, true];
3 print(l1); //['你哈哈' 22 true]
4 print(l1.length); // 3
5 print(l1[0]); 你哈哈
6 }

// 3. 增加 list 数据

// 4. 第四种定义 list 的方法

创建一个固定长度的集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1 void main() {
2 var l2 = <String>['你哈哈', '夏dj', '521'];
3 var l3 = <String>['你哈哈', '夏dj', 521]; //会报错,因为指定的是String类型,不是数字型
4 print(l2);
5 print(l3);
6 }
1 void main() {
2 var l2 = <double>[2023.12, 2022, 521]; // 指定为数字型 浮点型
3 var l3 = <int>[2023, 2022, 521]; // 指定为数字型 整点型
4 print(l2);
5 print(l3);
6 print(l3.length);
7 print(l2.last);
8 }
1 void main() {
2 var zl = [];
3 zl.add(22);
4 zl.add('你哈哈');
5 zl.add('夏dj');
6 print(zl);
7 print(zl.length);
8 }
1 void main() {
2 // var cy = List.filled(length, fill); // 创建一个固定长度的集合
3 // length 是集合长度 fill 是填充内容 ;

// 1. 第一种定义 map 的方式

// 2. 第二种定义 map 的方式

1
2
3
4
5
6
7
8
9
10
11
4 var cyy = List.filled(3, '');
5 print(cyy);
6 print(cyy[0]);
7 cyy[0] = '夏dj';
8 cyy[1] = '最美';
9 cyy[2] = '521';
10 print(cyy);
11 print(cyy.length);
12 print(cyy.last);
13 cyy.add('你哈哈'); // 会报错,因为是固定长度的集合
14 }

Dart 数据类型: Maps(字典)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1 // 第一种定义 Maps的方式;
2 var girfriend = {
3 'name': '夏dj',
4 'age': 18,
5 'looks': '最最最最最最最美',
6 };
7 print(girfriend);
8 print(girfriend.length);
9 print(girfriend['age']);
10 print(girfriend['looks']);
11 }
1 void main() {
2 var zl = new Map(); // 2. 通过new Map定义
3 zl['name'] = '你哈哈';
4 zl['girfriend'] = '夏dj';
5 zl['age'] = 22;
6 zl['girfriend_looks'] = ['嘎嘎美', '嘎嘎温柔', '嘎嘎好'];
7 print(zl);
1
2
3
8 print(zl['girfriend_looks']);
9 print(zl['girfriend_looks'][2]);
10 }

Dart 判断数据类型

is 关键词来判断类型

1
2
3
4
5
6
7
8
9
10
11
1 void main() {
2 // is 关键词判断类型
3 var str = 20220603;
4 if (str is String) {
5 print('String');
6 } else if (str is int) {
7 print('是数字型');
8 } else {
9 print('其他类型');
10 }
11 }

Dart 运算符

算数运算符

+ - * / ~/(取整) %(取余)

1
2
3
4
5
6
7
8
9
10
1 void main() {
2 int a = 14;
3 int b = 5;
4 print(a + b); // 加
5 print(a - b); // 减
6 print(a * b); // 乘
7 print(a / b); // 除
8 print('-------');
9 print(a % b); // 取余
10 print(a ~/ b); //取整

! 取反

&& 并且:全部为 true 的话值为 True 否则值为 false

|| 或者:全为 false 的话值为 false 否则值为 true

11 }

关系运算符

== != > < >= <=

1
2
3
4
5
6
7
8
9
10
11
1 void main() {
2 double a = 2022; //浮点型 2022.
3 int b = 2022; //整数型
4 print('$a $b');
5 print(a == b);
6 print(a != b);
7 print(a > b);
8 print(a < b);
9 print(a >= b);
10 print(a <= b);
11 }

逻辑运算符

! && ||

1 // 1. !取反
1
2
3
4
5
6
7
2 void main() {
3 bool flag1 = true;
4 bool flag2 = false;
5 var a = !flag1; //取反
6 print(a);
7 print(flag2);
8 }
1 // 2. &&并且 有假则假

2 void main() {
3 bool a = true;
4 bool b = true;
5 bool c = false;
6 bool d = true;
7 if (a && b) {
8 print(‘a&&b=true 爱宝贝也是真’);
9 } else {
10 print(‘a&&b 为假’);
11 }
12 if (c && d) {
13 print(‘真’);
14 } else {
15 print(‘肯定爱哈宝’);
16 }
17 }
1 // 3. ||或者 有真则真
2 void main() {
3 bool a = true;
4 bool b = true;
5 bool c = false;
6 bool d = true;
7 if (a || b) {
8 print(‘全是真的, 爱宝贝也是真的’);
9 } else {
10 print(‘a||b’);
11 }
12 if (c || d) {
13 print(‘有真则真’);
14 } else {
15 print(‘肯定爱哈宝’);
16 }
17 }

随堂练习

// 如果一个人的年龄是 18 并且 性别是女的话 打印出这个人

// 如果一个人的名字教你嘿嘿 或者 性别是女的话 打印出这个人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1 void main() {
2 String name = '你嘿嘿';
3 int age = 18;
4 String sex = '女👩';
5 if (age == 18 && sex == '女👩') {
6 print('$name -- $age -- $sex');
7 } else {
8 print('这样优秀的人只有你嘿嘿!');
9 }
10 }
1 void main() {
2 String name = '你嘿嘿';
3 int age = 18;
4 String sex = '女👩';
5 if (name == '你嘿嘿' || sex == '女👩') { // 有真则真
6 print('$name -- $age -- $sex');
7 } else {
8 print('肯定是我宝贝好朋友!');
9 }
10 }

赋值运算符

基础赋值运算符 = ??=

1
2
3
4
1 void main(){
2 int b=521;
3 b??=1314; // 我的会报错,不知道啥原因。
4 print(b);
5 }

复合赋值运算符 += -= *= /= %= ~/=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1 void main() {
2 var a = 2022;
3 a += 1; // a加 1 等于几
4 print(a); // 2023
5 var b = 2023;
6 b -= 1; // b减 1 等于几
7 print(b); // 2022
8 var c = 2022;
9 c *= 2; //c乘 2 等于几
10 print(c); // 4044
11 // var d = 2022.0; //不能是int整数型 ,必须是double 浮点型
12 double d = 2022; // /=只能是double型
13 d /= 2;
14 print(d);
15 var e = 2023;
16 e %= 2; // e除以 2 的余数;
17 print(e);
18 var f = 2023;
19 f ~/= 2; //f除以 2 取整
20 print(f);
21 }

条件表达式

if else

1
2
3
4
5
6
1 void main() {
2 bool flag = true;
3 if (flag == true) { // 这里的==true可以省略
4 print('true');
5 } else {
6 print('false');

// 判断一个人的成绩, 如果大于 60 显示及格, 如果大于 70 显示良好,大于 90 显示优秀

7 }
8 }
1
2
3
4
5
6
7
8
9
10
11
12
1 void main() {
2 var score = 76;
3 if (score > 90) {
4 print('优秀');
5 } else if (score > 70) {
6 print('良好');
7 } else if (score >= 60) {
8 print('及格');
9 } else {
10 print('低于 60 不及格');
11 }
12 }

switch case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1 void main() {
2 var sex = '女';
3 switch (sex) {
4 case '男':
5 print('性别是男');
6 break;
7 case '女':
8 print('性别是女');
9 break;
10 default:
11 print('传入参数错误');
12 break;
13 }
14 }
15

三目运算符

1 //正常这样写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2 void main() {
3 var flag = true;
4 var c;
5 if (flag) { // 省略 ==true
6 c = '我是true';
7 } else {
8 c = '我是false';
9 }
10 print(c);
11 }
12 // 三目运算简化后
13 void main() {
14 bool flag = true;
15 String c = flag? '我是true' : '我是flase';
16 print(c);
17 }

??运算符:

1
2
3
4
5
1 void main() {
2 var a;
3 var b = a ?? 10; // 如果a是空的话,将会把 10 赋值给a
4 print(b);
5 }

Dart 类型转换

1. String 型转 Number 型

int.parse(); /double.parse();

1
1 void main() {

解决 String 赋值为空的报错

1
2
3
4
5
2 String str = '123';
3 var myNum = double.parse(str);
4 print(myNum);
5 print(myNum is double);
6 }

案例 try catch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1 void main() {
2 String price = '123'; // 商品的价钱
3 var myNum = double.parse(price);
4 print(myNum);
5 print(myNum is double);
6 }
7
8 // 报错
9 void main() {
10 String price = ' ';
11 var myNum = double.parse(price);
12 print(myNum);
13 print(myNum is double);
14 }
15
16 //解决
17 void main() {
18 String price = '1';
19 try {
20 var myNum = double.parse(price);
21 print('商品的价格是:$myNum元');
22 print(myNum is double);
23 } catch (err) {
24 print('商品的价格是:0元');
25 }
26 }
27

// isEmpty: 判断字符串是否为空

2. Number 型转 String 型

.toString ( )

1
2
3
4
5
6
7
1 void main() {
2 var myNum = 2022.0;
3 var str = myNum.toString(); //将number型转为String型
4 print(str is String);
5 print('是$str');
6 }
7

3. 其他类型转换成 Booleans 类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1 void main(){
2 var str='110';
3 if(str.isEmpty){
4 print('str是空');
5 }else{
6 print('str不是空');
7 print('str的值是$str');
8 }
9 }
1 void main(){
2 var myNum;
3 if(myNum==0){
4 print('为0');
5 }else{
6 print('非0');
7 }
8 }

Dart 使用了许多通用方法,试想这个可以将集合元素转换为一个单一值的 方法。下面是一个对

集合中的数字进行求和的例子:

在赋值运算里面 如果++— 写在前面 这时候先运算 再赋值,如果++ —写在后面 先赋值后运行运算

fold

1
2
3
4
5
1 void main() {
2 List<int> numbers = [1, 2, 3];
3 final sum = numbers.fold(0, (x, y) => x + y);
4 print('The sum(合) of $numbers is $sum');
5 }

Dart 循环语句

++ —

for 基本语法

1 // 1. 打印从 1 到 100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2 void main(){
3 for(int i=1; i<=100; i++){
4 print(i);
5 // 第一步,声明变量int i=1
6 // 第二步,判断i<=100
7 // 第三步,print(i)
8 // 第四步,i++
9 // 第五步,返回第二步再来,直到判断为false
10 print('我是$i'); // 看下面 2.
11 }
12 }
13
14 // 2. Vs Coade 给出的方案
15 void main() {
16 for (int i = 1; i <= 100; i++) {
17 print(b(i));
18 }
19 }
20 String b(int i) => '我是$i';

// 1. 打印 0-50 所有偶数

打印 0-50 里 10 的倍数

1
2
3
4
5
6
7
8
9
10
1 void main(){
2 for (int i = 1; i <= 50; i++) {
3 if(i%2==0){
4 print(i);
5 }
6 }
7 }
1 void main(){
2 for()
3 }