素材下载原地址
素材下载原地址2022 年 9 月重新录制的 Flutter 教程_Dart Flutter 入门实战系列视频教程- 支持 Flutter3.x_IT 营 (itying.com)
Dart Flutter 网盘下载地址:https://pan.baidu.com/s/1gRxupvp3I3u7MruJ-RIw0w
提取码:abcd
Dart 介绍:
Dart 是由谷歌公司开发的计算机编程语言,他可以被用于 Web,服务器,移动应用和物联网等领域的开发。
Dart 诞生于 2011 年,号称要取代 javascippt,但是过去的几年中一直不温不火,直到 Flutter 的出现现在才被人们重新重视。
要学 Flutter 的话就必须先学会 Dart.
官方文档:
windows (推荐):
需要翻墙
2022 年 9 月重新录制的 Flutter 教程_Dart Flutter 入门实战系列视频教程- 支持 Flutter
3.x_IT 营 (itying.com)
Dart 介绍:
Dart 环境搭建:
安装完成后 windows 键盘+r
输入 cmd
dart —version 回车
安装完成!
两种安装方式
1.命令行(不推荐)
2. 安装
vscoad 扩展安装:
1.搜索 Dart 安装 🆗
2.搜索 Code Runner 安装 🆗
出现上面这种情况可能是 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();
解决 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 }
|