在学习Flutter之前,还是得先把基础打好,先来学习一下Dart的基础知识。
import 'package:dart/dart.dart' as dart;
main(List arguments) {
print('Hello world: ${dart.calculate()}!');
}
Dart是一个强大的脚本类语言,可以不预先定义变量类型,自动会类型推导(有点kotlin的味道),Dart中定义变量可以通过var关键字可以通过类型来申明变量,如:
var str='this is var';
String str='this is var';
int str=123;
// 注意: var 后就不要写类型 ,
//写了类型 不要var 两者都写 var a int = 5; 报错
const值不变,一开始就得赋值,
final可以开始不赋值,最后只能赋一次 ;
而final不仅有const的编译时常量的特性,最重要的它是运行时常量,
并且final是惰性初始化,即在运行时第一次使用前才初始化.
永远不改量的量,请使用final或const修饰它,而不是使用var或其他变量类型。
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
int
double
String
bool
在Dart中,数组是列表对象,所以大多数人只是称它们为列表
Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次
数值类型的数据比较好理解,就是int和double类型的数据等。
//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);
var str1='this is str1';
var str2="this is str2";
String str3="""
this is str1
this is str2
this is str3
""";
bool类型的数据无非就是true或者false
//1、bool
// bool flag1=true;
// print(flag1);
// bool flag2=false;
// print(flag2);
//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 a=123;
var b=123;
if(a==b){
print('a=b');
}else{
print('a!=b');
}
数组类型的数据就是将一众合数据组成一个数组,选择这个数组中某一个数据可以由数组的index值来选择。
var l1=['aaa','bbbb','cccc'];
print(l1);
print(l1.length);
print(l1[1]);
//
var l2=new List();
l2.add('张三');
l2.add('李四');
l2.add('王五');
print(l2);
print(l2[2]);
//如果我们需要让数组类型的数据中都由一种数据组成我们可以这样设置数组
var l3=new List();
l3.add('张三');
// l3.add(123);//报错,因为数据类型不匹配
print(l3);
Map数据类型我们其实可以看成是一种对象类型数据,这个在我们开发实践中很常见,
所有的json数据都基本上会采用Map,我们可以把Map理解成一种Key/Value类的数据形式,
var person={
"name":"张三",
"age":20,
"work":["程序员","送外卖"]
};
print(person);
print(person["name"]);
print(person["age"]);
print(person["work"]);
//另一种方式
var p=new Map();
p["name"]="李四";
p["age"]=22;
p["work"]=["程序员","送外卖"];
print(p);
print(p["age"]);
描述 | 操作符 |
---|---|
一元后置操作符 | expr++ expr-- () [] . ?. |
一元前置操作符 | expr !expr ~expr ++expr --expr |
乘除 | * / % ~/ |
加减 | + - |
位移 | << >> |
按位与 | & |
按位或 | | |
按位异或 | ^ |
逻辑与 | && |
逻辑或 | || |
关系和类型判断 | >= > <= < as is is! |
等 | == != |
如果为空 | ?? |
条件表达式 | expr1 ? expr2 : expr3 |
赋值 | = *= /= ~/= %= += -= <<= >>= &= ^= = ??= |
++和--是自增自减运算符,表示变量自动增加或者减少
var a=10;
var b=a--;
print(a); //9
print(b); //10
+=和-=是表示变量加上等号后面的值或者自己减少等号后面的值
var c = 10;
c+=10,
print(c);//20
if中书写条件语句,else则是非if中条件的执行block
三目运算符其实原理跟if..else如出一辙,只是判断简化了不少
bool flag=false;
String c=flag?'我是true':'我是false';
print(c);
意思是说假如果有a和b两个变量,要把a的值给b,如果a有值则直接将a的值给b,如果a没有值就用??后面的值去取代a的值赋给b
var a;
var b= a ?? 10;
print(b);
//输出: 10
do..while中do表示条件控制,while里表示循环内容
语法格式:
while(表达式/循环条件){
}
do{
语句/循环体
}while(表达式/循环条件);
tips:
1、最后的分号不要忘记
2、循环条件中使用的变量需要经过初始化
3、循环体中,应有结束循环的条件,否则会造成死循环。
不想说了:
for (int i = 1; i<=100; i++) {
print(i);
}
//第一步,声明变量int i = 1;
//第二步,判断i <=100
//第三步,print(i);
//第四步,i++
//第五步 从第二步再来,直到判断为false
List就是数组类型,数组表示众多数据集合在一个数组类型中,换言之我们用一个[]来表示这些数据:
List fruitList=['香蕉','苹果','西瓜'];
//又或者
List numList=[1,2,3];
在Dart中内置了很多对List操作的方法:
属性:
名称 | 含义 |
---|---|
length | 长度 |
reversed | 翻转 |
isEmpty | 是否为空 |
isNotEmpty | 是否不为空 |
方法:
方法名 | 含义 |
---|---|
remove | 删除 |
removeAt | 删除,传入索引值 |
add | 增加 |
addAll | 拼接数组 |
indexOf | 查找,传入具体值 |
fillRange | 修改 |
Insert(index,value) | 指定位置插入 |
insertAll(index,list) | 指定位置插入List |
toList() | 其他类型转换成List |
Join() | List转换成字符串 |
Split() | 字符串转化成List |
forEach | 遍历所有数组 |
map | 映射数组 |
Set就是集合类型,在Set中我们保证每个元素都是不相同不重复的
在许多语言中,Set可以用来区别数据唯一性的选择类型,Dart语言也不例外。
var s=new Set();
s.add('香蕉');
s.add('苹果');
s.add('苹果');
print(s); //{香蕉, 苹果}
print(s.toList()); //set转为List
可以用Set来对List进行去重操作
key和value解释数据
结束。