1、Dart 常量: final 和 const修饰符
const值不变 一开始就得赋值。
final 可以开始不赋值 只能赋一次 ;而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。
2、数据类型
// 第一种定义List的方式
var l1=["张三",20,true];
// 第二种定义List的方式 指定类型
var l2=<String>["张三","李四"];
// 第三种定义List的方式 增加数据 ,通过[]创建的集合它的容量可以变化
var l4 = [];
l4.add("张三");
l4.add("李四");
l4.add(20);
// 第四种定义List的方式
var l6=List.filled(2, ""); //创建一个固定长度的集合,长度是固定 没法增加数据
l6[0]="张三"; //修改集合的内容
l6[1]="李四";
// 第一种定义 Maps的方式
var person={ "name":"张三", "age":20, "work":["程序员","送外卖"]};
print(person["name"]);
// 第二种定义 Maps的方式
var p=new Map();
p["name"]="李四";
p["age"]=22;
p["work"]=["程序员","送外卖"];
print(p["age"]);
// is 关键词来判断类型
if(str is String){
print('是string类型');
}else if(str is int){
print('int');
}else{
print('其他类型');
}
类型之间的转换
Number类型转换成String类型 toString()
String类型转成Number类型 int.parse()
//打印List
List list=[{"title":"新闻111" },{"title":"新闻222"}, { "title":"新闻333" }];
for(var i=0;i<list.length;i++){
print(list[i]['title']);
}
// 定义一个二维数组 打印里面的内容
List list=[
{
"cate":'国内',
"news":[
{"title":"国内新闻1"},
{"title":"国内新闻2"},
{"title":"国内新闻3"}
]
},
{
"cate":'国际',
"news":[
{"title":"国际新闻1"},
{"title":"国际新闻2"},
{"title":"国际新闻3"}
]
}
];
for(var i=0;i<list.length;i++){
print(list[i]["cate"]);
for(var j=0;j<list[i]["news"].length;j++){
print(list[i]["news"][j]["title"]);
}
}
// while 和 do while的区别 第一次循环条件不成立的情况下
int i=10;
while(i<2){
print('不执行代码');
}
var j=10;
do{
print('执行代码');
}while(j<2);
3、List里面常用的属性和方法:
常用属性:
length长度 reversed翻转 isEmpty 是否为空 isNotEmpty是否不为空
常用方法:
add 增加 addAll拼接数组 indexOf 查找 传入具体值 remove 删除 传入具体值
removeAt 删除传入索引值 fillRange修改
insert(index,value); 指定位置插入 insertAll(index,list) 指定位置插入List
toList() 其他类型转换成List
join() List转换成字符串
split() 字符串转化成List
forEach map where any every
List myList=['香蕉','苹果','西瓜'];
myList.add('桃子'); //增加数据 增加一个
myList.addAll(['桃子','葡萄']); //拼接数组
print(myList.indexOf('苹x果')); //indexOf查找数据 查找不到返回-1 查找到返回索引值
myList.remove('西瓜');
myList.removeAt(1);
print(myList);
myList.fillRange(1, 2,'aaa'); //修改
myList.insert(1,'aaa'); //插入 一个
myList.insertAll(1, ['aaa','bbb']); //插入 多个
List myList=['香蕉','苹果','西瓜'];
var str=myList.join('-'); //list转换成字符串
print(str);
var str='香蕉-苹果-西瓜';
var list=str.split('-');
print(list);
3、Dart中的对象操作符:
? 条件运算符 as类型转换 is类型判断 .. 级联操作 (连缀) (记住)
Person p=new Person('张三', 20);
if(p is Person){
p.name="李四";
}
var p1;
p1='';
p1=new Person('张三1', 20);
p1.printInfo();
(p1 as Person).printInfo();
Person p1 = new Person('张三1', 20);
p1.printInfo();
p1
..name = "李四"
..age = 30
..printInfo();
4、dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
abstract class A{
late String name;
printA();
}
abstract class B{
printB();
}
class C implements A,B{
@override
late String name;
@override
printA() {
print('printA');
}
@override
printB() {
// TODO: implement printB
return null;
}
}
5、在Dart中可以使用mixins实现类似多继承的功能
因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性
class A {
String info="this is A";
void printA(){
print("A");
}
}
class B {
void printB(){
print("B");
}
}
class C with A,B{
}
6、冲突解决
当引入两个库中有相同名称标识符的时候,如果是java通常我们通过写上完整的包名路径来指定使用的具体标识符,甚至不用import都可以,但是Dart里面是必须import的。当冲突的时候,可以使用as关键字来指定库的前缀。如下例子所示:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
7、部分导入
如果只需要导入库的一部分,有两种模式:
模式一:只导入需要的部分,使用show关键字,如下例子所示:
import 'package:lib1/lib1.dart' show foo;
模式二:隐藏不需要的部分,使用hide关键字,如下例子所示:
import 'package:lib2/lib2.dart' hide foo;
8、async和await
这两个关键字的使用只需要记住两点:
只有async方法才能使用await关键字调用方法,如果调用别的async方法必须使用await关键字。
async是让方法变成异步。await是等待异步方法执行完成。
void main() async{
var result = await testAsync();
print(result);
}
//异步方法
testAsync() async{
return 'Hello async';
}
9、延迟加载
也称为懒加载,可以在需要的时候再进行加载。懒加载的最大好处是可以减少APP的启动时间。
懒加载使用deferred as关键字来指定,如下例子所示:
import 'package:deferred/hello.dart' deferred as hello;
当需要使用的时候,需要使用loadLibrary()方法来加载:
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
10、? 可空类型 ! 类型断言
int? a=123; // int? 表示a是一个可空类型
a=null;
String? str="this is str";
str=null;
print(str!.length);
//类型断言: 如果str不等于null 会打印str的长度,如果等于null会抛出异常
11、required关键词:
主要用于允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个 required 参数或者该参数有个默认值。









网友评论