美文网首页
二、Dart

二、Dart

作者: 求长生 | 来源:发表于2022-02-14 14:34 被阅读0次

    1、dynamic 动态
    2、final 最终的 const 常量 var变量
    final和const的区别:
    区别一:final 要求变量只能初始化一次,并不要求赋的值一定是编译时常量,可以是常量也可以不是。而 const 要求在声明时初始化,并且赋值必需为编译时常量。
    区别二:final 是惰性初始化,即在运行时第一次使用前才初始化。而 const 是在编译时就确定值了。
    3、内建数据类型
    Dart有如下几种内建的数据类型:
    numbers
    strings
    booleans
    list(或者是arrays)
    map
    runes(UTF-32字符集的字符)
    symbols 下面用一段代码来演示以上各类数据类型:
    类型为空
    int int? 可为空
    if (i != null) {
    print( i! * 9); // i!因为判过空,可以将i显式为非空变量
    }
    调用语法时 fun?.call() fun为空就不继续调用

    4、函数
    1.声明函数: 当Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理,注意,函数返回值没有类型推断;
    2.对于只包含一个表达式的函数,可以使用简写语法: =>
    3.函数作为变量
    4.函数作为参数
    5.可选的位置参数
    包装一组函数参数,用[]标记为可选的位置参数,并放在参数列表的最后面
    6.可选的命名参数
    定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。

    5、运算符
    // is运算符用于判断一个变量是不是某个类型的数据
    // is!则是判断变量不是某个类型的数据
    var s = "hello";
    print(s is String); // true
    var num = 6;
    print(num is! String); // true

    // ~/才是取整运算符,如果使用/则是除法运算,不取整
    int k = 1;
    int j = 2;
    print(k / j); // 0.5
    print(k ~/ j); // 0

    // as运算符类似于Java中的cast操作,将一个对象强制类型转换
    (emp as Person).teach();

    // ??=运算符 如果 ??= 运算符前面的变量为null,则赋值,否则不赋值
    var param1 = "hello", param2 = null;
    param1 ??= "world";
    param2 ??= "world";
    print("param1 = [图片上传失败...(image-1a395-1640058440697)]

    param2"); // param2 = world

    // ?.运算符
    var str1 = "hello world";
    var str2 = null;
    print(str1?.length); // 11
    print(str2?.length); // null
    print(str2.length); // 报错
    }

    …运算符(级联操作)
    main() {
    // 依次打印
    // I am eating...
    // I am sleeping...
    // I am studying...
    new Person()..eat()
    ..sleep()
    ..study();
    }

    mixing

    mixin Eat {
      eat() {
        print('eat');
      }
    }
    mixin Walk {
      walk() {
        print('walk');
      }
    }
    class Dog with Eat, Walk{}
    class Man extends Person with Eat, Walk, Code{}
    

    Dart 是不支持多继承的,
    extends用来继承,
    with用来混合mixin其他类。实现其他通用方法。

    异步 Future(未来) 和 Stream(流)
    使用asyncawait关键词,

    延时任务2秒后返回结果字符串"hi world!",然后在then中收到返回值data,打印结果。
    Future.delayed(Duration(seconds: 2),(){
       return "hi world!";
    }).then((data){
       print(data);
    });
    

    Future.catchError

    如果异步任务发生错误,我们可以在catchError中捕获错误
    Future.delayed(Duration(seconds: 2),(){
       //return "hi world!";
       throw AssertionError("Error");  
    }).then((data){
       //执行成功会走到这里  
       print("success");
    }).catchError((e){
       //执行失败会走到这里  
       print(e);
    });
    

    Future.whenComplete

    Future.delayed(Duration(seconds: 2),(){
       //return "hi world!";
       throw AssertionError("Error");
    }).then((data){
       //执行成功会走到这里 
       print(data);
    }).catchError((e){
       //执行失败会走到这里   
       print(e);
    }).whenComplete((){
       //无论成功或失败都会走到这里
    });
    

    Future.wait

    Future.wait([
      // 2秒后返回结果  
      Future.delayed(Duration(seconds: 2), () {
        return "hello";
      }),
      // 4秒后返回结果  
      Future.delayed(Duration(seconds: 4), () {
        return " world";
      })
    ]).then((results){
    //都收到结果时
      print(results[0]+results[1]);
    }).catchError((e){
    //只要有一个失败时
      print(e);
    });
    

    Async/await

    Stream(流)
    Stream 也是用于接收异步事件数据,它可以接收多个异步操作的结果。

    Stream.fromFutures([
     // 1秒后返回结果
     Future.delayed(Duration(seconds: 1), () {
       return "hello 1";
     }),
     // 抛出一个异常
     Future.delayed(Duration(seconds: 2),(){
       throw AssertionError("Error");
     }),
     // 3秒后返回结果
     Future.delayed(Duration(seconds: 3), () {
       return "hello 3";
     })
    ]).listen((data){
      print(data);
    }, onError: (e){
      print(e.message);
    },onDone: (){
    
    });
    依次输出结果:
    I/flutter (17666): hello 1
    I/flutter (17666): Error
    I/flutter (17666): hello 3
    

    相关文章

      网友评论

          本文标题:二、Dart

          本文链接:https://www.haomeiwen.com/subject/meevfrtx.html