🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Flutter学习
🌠 首发时间:2024年4月22日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
Dart入门
介绍
- Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发
- Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火,直到Flutter的出现才被人们重新重视
- 要学习Flutter的话我们必须首先得先学会Dart语言
- 官网:https://dart.dev/
环境搭建
现在网上安装Flutter的教程很多,自己找一个跟着安装即可,可以参考这一片博客:vscode配置flutter开发环境,不需要安装第三方安卓模拟器。Flutter 里面也包含了 Dart 的 SDK,所以安装完 Flutter 我们也可以运行 Dart 语言。
安装完,一般都会有一个测试步骤,就是在命令行窗口执行 flutter doctor
命令,全部路灯即为成功:
ps:网络有问题的,可以配置以下 Git 的使用代理
开发工具
Dart的开发工具有很多: IntelliJ IDEA 、 WebStorm、 Atom、vscode等
我这里使用的是 vscode,然后我们要在 vscode 中先安装一些插件:
- Flutter 插件
- Code Runner 插件,可以运行我们的代码
Dart基础知识
入口方法
我们的 dart 代码都要在入口方法中才能执行,入口方法的定义方法有两种:
方式一:
main() {
print('你好dart');
}
方式二:
//表示main方法没有返回值
void main(){
print('你好dart');
}
想要执行代码的话,右键选择 Run Code 即可,用快捷键也可以:
注释
我们可以用双斜杠来注释代码,快捷键为 Ctrl + /;也可以用三斜杠 ///;多行注释的话,用 /* */,快捷键为 Alt + Shift + A
ps:vscode 中一键格式化代码的快捷键为 Alt + Shift + F
变量
-
Dart是一个强大的脚本类语言,可以不预先定义变量类型,会自动进行类型推导
-
Dart中定义变量可以通过
var
关键字或者通过类型来申明变量 -
写了
var
后就不要再写类型, 写了类型就不要写var
void main() { var str1 = '你好dart'; var myNum1 = 1234; print(str1); print(myNum1); // 字符串 String str2 = '你好dart'; print(str2); // 数字类型 int myNum = 12354; print(myNum); }
变量的命名规则:
- 变量名称必须由数字、字母、下划线和美元符(
$
)组成 - 标识符(变量名)开头不能是数字
- 标识符不能是保留字和关键字
- 变量的名字是区分大小写的,如:
age
和Age
是两个不同的变量。在实际的运用中,也建议不要用一个单词大小写区分两个变量 - 标识符一定要见名思意 :变量名称建议用名词,方法名称建议用动词
常量
-
在 Dart 中,我们用
final
和const
修饰符来定义常量 -
const
的值不能改变,一开始就得赋值 -
final
可以在定义时不赋值,但是只能赋一次值; 而final
不仅有const
的编译时常量的特性,最重要的它是运行时常量,并且final
是惰性初始化,即在运行时第一次使用前才初始化 -
永远不改量的量,请使用
final
或const
修饰它,而不是使用var
或其他变量类型void main() { //const常量 const PI1 = 3.14159; print(PI1); //final常量 final PI2 = 3.14159; print(PI2); //const常量在定义时必须要赋值,而方法是要运行时才会赋值 // const a = new DateTime.now(); //报错 //所以如果想将一个方法的返回值定义为常量,请用final final b = new DateTime.now(); print(b); final c; c = 10; print(c); //10 }
数据类型
Dart中支持以下数据类型,常用数据类型:
- Numbers(数值):
- int
- double
- Strings(字符串)
- String
- Booleans (布尔)
- bool
- List(数组)
- 在Dart中,数组是列表对象,所以大多数人只是称它们为列表
- Maps(字典)
- 通常来说,Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键只出现一次, 而一个值则可以出现多次
字符串类型
/*
Dart数据类型:字符串类型
*/
void main() {
//1、字符串定义的几种方式
//用单引号
var str = 'this is str';
print(str);
//用双引号
String str1 = "this is str1";
print(str1);
//三个单引号或双引号可以定义多行的字符串
String str2 = '''
this is str2
this is str2
this is str2
''';
print(str2);
String str3 = """
this is str3
this is str3
this is str3
""";
print(str3);
//2、字符串的几种拼接方式
print("字符串的拼接:");
String str4 = '你好';
String str5 = 'Dart';
print("$str4 $str5");
print(str4 + str5);
print(str4 + " " + str5);
}
数值类型
/*
Dart数据类型:数值类型
*/
void main() {
//1、int 必须是整型
int a = 123;
a = 45;
print(a);
//2、double 既可以是整型 也可是浮点型
double b = 23.5;
b = 24;
print(b);
//3、运算符
// + - * / %
var c = a + b;
print(c);
}
布尔类型
/*
Dart数据类型:布尔类型
bool 值true/false
*/
void main() {
//1、bool
bool flag1 = true;
print(flag1);
//2、条件判断语句
var flag = true;
if (flag) {
print('真');
} else {
print('假');
}
//在条件判断时不会自动进行类型的转换
var a = 123;
var b = '123';
if (a == b) {
print('a=b');
} else {
print('a!=b');
}
var c = 123;
var d = 123;
if (c == d) {
print('c=d');
} else {
print('c!=d');
}
}
List类型
/*
Dart数据类型: List(数组/集合)
*/
void main() {
//1、第一种定义List的方式: []
print(" l1:");
var l1 = ["张三", 20, true];
print(l1); //[张三, 20, true]
print(l1.length); //3
print(l1[0]); //张三
print(l1[1]); //20
//2、第二种定义List的方式: [], 但指定类型
print(" l2:");
var l2 = <String>["张三", "李四"];
print(l2);
print(" l3:");
var l3 = <int>[12, 30];
print(l3);
//3、第三种定义List的方式: [], 增加数据, 通过[]创建的集合它的容量是可以变化的
print(" l4:");
var l4 = [];
print(l4);
print(l4.length);
l4.add("张三");
print(l4);
print(l4.length);
print(" l5:");
var l5 = ["张三", 20, true];
l5.add("李四");
l5.add("zhaosi");
print(l5);
//4、第四种定义List的方式, 创建一个固定长度和类型的集合
print(" l6:");
var l6 = List.filled(2, "");
print(l6);
print(l6[0]);
l6[0] = "张三"; //修改集合的内容
l6[1] = "李四";
print(l6); //[张三, 李四]
// l6.add("王五"); //错误写法, 通过List.filled创建的集合长度是固定, 没法增加数据
// 通过List.filled创建的集合长度是固定, 无法修改长度
print(" l7:");
var l7 = List.filled(2, "");
print(l7.length);
// l7.length = 0; //报错
print(" l8:");
var l8 = <String>["张三", "李四"];
print(l8.length); //2
l8.length = 0; //可以改变的
print(l8); //[]
print(" l9:");
var l9 = List<String>.filled(2, "");
l9[0] = "string";
print(l9);
}
Map类型
/*
Dart数据类型: Maps(字典)
*/
void main() {
//第一种定义 Maps的方式
var person = {
"name": "张三",
"age": 20,
"work": ["程序员", "送外卖"]
};
print(person);
print(person["name"]);
print(person["age"]);
print(person["work"]);
//第二种定义 Maps的方式
var p = new Map();
p["name"] = "李四";
p["age"] = 22;
p["work"] = ["程序员", "送外卖"];
print(p);
print(p["age"]);
}
类型判断
当我们需要判断接收到的一个数据是什么类型时,我们可以用 is
关键词来判断
/*
Dart判断数据类型
*/
void main() {
var str = 123;
if (str is String) {
print('是string类型');
} else if (str is int) {
print('int');
} else {
print('其他类型');
}
}
类型转换
- Number类型转换成String类型:
toString()
- String类型转成Number类型:
int.parse()
、double.parse()
,一般用double.parse()
,因为int.parse()
无法转换浮点型
void main() {
//1、Number与String类型之间的转换
String str1 = '123';
var myNum1 = int.parse(str1);
print(myNum1 is int);
String str2 = '123.1';
var myNum2 = double.parse(str2);
print(myNum2 is double);
String price = '12';
var myNum3 = double.parse(price);
print(myNum3);
// try ... catch: 处理异常
String price1 = '';
try {
var myNum4 = double.parse(price1);
print(myNum4);
} catch (err) {
print(0);
}
var myNum5 = 12;
var str3 = myNum5.toString();
print(str3 is String);
// 2、其他类型转换成Booleans类型
// isEmpty:判断字符串是否为空
var str4 = '';
if (str4.isEmpty) {
print('str4空');
} else {
print('str4不为空');
}
var myNum6 = 123;
if (myNum6 == 0) {
print('myNum6为0');
} else {
print('myNum6非0');
}
var myNum7;
print("myNum7: $myNum7");
if (myNum7 == 0) {
print('myNum7为0');
} else {
print('myNum7非0');
}
var myNum8;
if (myNum8 == null) {
print('空');
} else {
print('非空');
}
var myNum9 = 0 / 0;
print("myNum9: $myNum9");
if (myNum9.isNaN) {
print('NaN');
}
}
运算符
- 算术运算符:
+ - * / ~/ (取整) %(取余)
- 关系运算符:
== != > < >= <=
- 逻辑运算符:
! && ||
- 赋值运算符:
- 基础赋值运算符:
= ??=
- 复合赋值运算符:
+= -= *= /= %= ~/=
- 基础赋值运算符:
- 三目运算符:
??运算符:
- 自增自减运算符:
++ --
大部分运算符的规则和其它语言都一样
赋值运算符
基础赋值运算符:??=
void main() {
// 基础赋值运算符 ??=
// b??=23; 表示如果b为空的话, 就把23赋值给b
int a = 6;
a ??= 23;
print(a);
int? b; //int? 表示可为空的整型
b ??= 23;
print(b);
}
三目运算符
void main() {
//1、三目运算符
bool flag = false;
String s = flag ? '我是true' : '我是false';
print(s);
//2、 ??运算符
var a;
var b = a ?? 10;
print(b); //10
var c = 22;
var d = c ?? 10;
print(d); //22
}