dart语言

2023-08-04  本文已影响0人  落寞1990

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 参数或者该参数有个默认值。

上一篇 下一篇

猜你喜欢

热点阅读