1. 变量与常量
变量声明:
// 制定类型声明
String name = "cy";
// 类型推导方式声明
var age = 18;
常量声明:
// final方式
final job = "doctor";
// const 方式
const adress = "北京";
区别:
- const必须赋值常量值,编译期间必须给一个确定值(编译时)
- final可以通过计算/函数获取值(运行时)
通过使用const声明方式减少堆内存开销:
这种声明方式,user1和user2两个对象内容指向同一内存空间,user3开辟新空间
const user1 = User("cy");
const user2 = User("cy");
const user3 = User("cat");
class User{
final String name;
const User(this,name);
}
2. 基本类型
Bool
var isTrue = true;
dart没有非零即真非空即真,必须置顶true或false
字符串
三种定义方式:
var st1 = 'asd';
var st2 = "asd";
var st3 = '''
a
s
d
''';//可以换行
字符串和表达式拼接
var name = "cy";
var job = "flutter";
var language = "dart";
var message = "user:${name},job:${job},useLanguage:${language}";
集合类型
list
var names = ["a","v","c"];
List<int> numbers = [1,2,3,4];
set
var letters = {"a","v","b"};
Set<int> = {1,2,3,4};
map
var data = {
"user":"cy",
"age":18
}
Map<String,Object> data = {
"user":"cy",
"age":18
}
集合的常见操作
/__________________list和set类型_______________________/
//获取长度
letters.length;
/// 添加、删除、 判断是否包含元素
list.add(2);
set.add(2);
list.remove(2);
list.removeAt(1);//根据下标删除元素
set.remove(2);
list.contains(2);
set.contains(2);
print($list $set);
/__________________类型_______________________/
// 根据key获取value
map['name'];
// 获取所有元素
print('${map.entries} ${map.entries.runtimeType}');
// 获取所有key
print('${map.keys} ${map.entries.runtimeType}');
// 获取所有value
print('${map.values} ${map.entries.runtimeType}');
// 判断是否包含某个key或value
print('{$map.containsKey('age')} ${map.containsValue(10)}');
// 根据key删除元素
map.remove('key');
使用set过滤list中重复数据
var numbers = [1,2,3,3,2,3,2,4,5,6];
numbers = Set.from(numbers).toList();
3.函数
*注意:dart中没有函数重载,不允许定义相同方法名
int add(int number1,int number2){
return number1 + number2;
}
函数中的可选参数有两种:
1.位置可选参数
void test1(String name,[int age,String job]){
}
调用时后面参数可根据选择传递,但是如果传递参数必须与位置一一对应
test1("test");
test1("cy",18,"flutter");
2.命名可选参数
void test2(String name.{int age,String job}){
}
命名可选参数必须要写参数名,没有顺序要求
test2("cy",age:18);
函数中的参数默认值
只有可选参数才能设置默认值
void test1(String name,[int age = 0,String job]){
}
匿名函数 && 函数可以作为另一个函数的参数
typedef AddFunc = int Function(int number1,int number2);
void test(AddFunc add){
add(1,2);
}
调用:
test((number1,number2){//匿名函数方式调用
return number1 + number2;
});
函数作为返回值调用
Calculate divide(){
return (number1,number2){
return number1 / number2;
}
}
var divideFunc = devide();
print(divideFunction(4,2));//=>2
4.运算符
赋值运算符
var name = "cy";
name ??== "hello";// 当原来变量有值,则当前操作不执行(原变量为空则赋值hello)
var another = name ?? "haha";//判断name是否为空,如果为空则赋值为haha
*级联运算符
-------- 支持链式调用
class Test{
String name;
void func1(){print("func1调用");}
void func2(){print("func2调用");}
}
调用:
var test = Test()
..name = "cy"
..func1()
..func2();
5. 循环
for(var i = 0,i<10;i++){
}
for(var value in list){
}
6.枚举
enum Fruit{
apple,
orange,
lemon,
waterlemon
}
final fruit = Fruit.apple;
switch(fruit){
case Fruit.apple:
print("苹果");
break;
case Fruit.orange:
print("橘子");
break;
case Fruit.lemon:
print("柠檬");
break;
case Fruit.waterlemon:
print("西瓜");
break;
}
获取没居中所有value的列表
List innerValues = Fruit.values;
获取对应value所在索引
print(Fruit.orange.index);








网友评论