Dart入门

要学习Flutter,先熟悉一下Dart总是有益的。Dart中文网传送门
在线测试传送门
看此篇文章是java熟悉者会比较容易

  • main()
    • main()在dart里面是必须的一个函数,是应用的入口,
  • dart 声明对象
//1、使用var ,让程序去推断类型
var name = "hello ppx";

//2、使用具体的类型,有趣的是:如果不给int age赋值,那么打印出来的age将是null,而不是像Java中是0,因为dart中一切皆对象
int age = 12;

//任何类型
  dynamic a = "";
  dynamic b = 1;
  • Dart 没有关键字 “public” , “protected” 和 “private” 。 如果标识符以下划线(_)开头,则它相对于库是私有的。每个 Dart 应用程序都是一个库
  • await 相当于async 异步操作时使用的关键字
  • 异步函数
  //普通函数
  String lookUpVersion() => '1.0.0';

  //异步函数
  Future<String> lookUpVersion1() async => '1.0.0';
  • Dart 语言支持以下内建类型:
    • Number(包括int和double)
    • String
    • Boolean
    • List (也被称为 Array)
    • Map
    • Set
    • Rune (用于在字符串中表示 Unicode 字符)
    • Symbol
  • 可选参数分为,命名可选参数和位置可选参数
//命名可选参数,调用时(就是普通认知里面的调用而已
  testFun(true, true);
  
   //命名可选参数,定义时(也是普通认知里面的定义而已)
  void testFun2(bool a) {}
  
//位置可选参数,定义时用[]包起来就是
  //定义位置可选参数的时候,有一个非空判断 ,要么给位置可选参数的类型后面加上问号,定义成可空变量;
  // 要么在参[]前面加上注释@required ,定义成必须可选参数。
  // 但是这样的话感觉这个可选参数都没有意义了,,既然是必选那何必加在[]里面呢
   void testFun3(bool a, @required [String device])
  {}
  //调用位置可选参数
  testFun3(true, "666");
  
  void testFun4(bool a, [bool? b]) {
  }
  //调用位置可选参数
  testFun4(true);
  testFun4(true, false);

运算符
  • 算数运算符:+ - * / ~/ % ++ –
    • 以上分别对应加减乘除,取整和取余,还有自增和自减
  • 关系运算符:== 、 != 、> 、< 、>=、<=
  • 类型判定运算符:as 、is 、is!
  • 赋值运算符:= 、 ??= ,以及多种复合赋值运算符 +=、-=、/=、*=、%=、>>=、^=、~/=、<<=、&=、|=
    • ??= 是当变量在为空的情况下才给他赋值
  • 逻辑运算符:&&、||、!
  • 按位和移位运算符:&、|、^、~、<<、>>
  • 级联运算符:…
//相当于链式调用,例如
querySelector('#confirm') // 获取对象。
  ..text = 'Confirm' // 调用成员变量。
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

控制流程语句
  • if 和 else
  • for 循环
    • 只额外记一种即可:for in
    var collection = [0, 1, 2];
    for (var x in collection) {
        print(x); // 0 1 2
    }
    
  • while 和 do-while
  • break 和 continue
  • switch 和 case

异常
  • throw
  • catch :捕获异常,on指定异常类型, catch 来 捕获异常对象。catch的参数可以有一个或两个,两个的时候第二个是堆栈信息( StackTrace)
try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // 一个特殊的异常
  buyMoreLlamas();
} on Exception catch (e) {
  // 其他任何异常
  print('Unknown exception: $e');
} catch (e ,s) {
  // 没有指定的类型,处理所有异常
  print('Something really unknown: $e');
}
  • finally

  • 构造函数
//常量构造函数,const+函数名称
var p = const ImmutablePoint(2, 2);
  • 扩展类
    • 重写操作符:以下操作符均可被重写
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxkMhb13-1629447910503)(https://s3.bmp.ovh/imgs/2021/08/36d0e9446ce2e1c2.png)]
    • 例如:重写 + 运算符
    class Vector {
      final int x, y;
    
      Vector(this.x, this.y);
    
      Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
      Vector operator -(Vector v) => Vector(x - v.x, y - v.y);
    
      // 运算符 == 和 hashCode 部分没有列出。 有关详情,请参考下面的注释。
      // ···
    }
    
    void main() {
      final v = Vector(2, 3);
      final w = Vector(2, 2);
    
      assert(v + w == Vector(4, 5));
      //相当于将两个Vector分别带入上面表达式
      assert(v - w == Vector(0, 1));
    }    
    
  • 复用类代码:Mixin,重点就是with后面的类会覆盖前面的类的同名方法
  • 举个栗子:
    class A {
      String getMessage() => 'A';
    }
    
    class B {
      String getMessage() => 'B';
    }
    
    class P {
      String getMessage() => 'P';
    }
    
    class AB extends P with A, B {}
    
    class BA extends P with B, A {}
    
    void main() {
      String result = '';
    
      AB ab = AB();
      result += ab.getMessage();
    
      BA ba = BA();
      result += ba.getMessage();
    
      print(result);//打印BA
    }
    
  • 处理 Future
    • 可以通过下面两种方式,获得 Future 执行完成的结果:
    • 使用 async 和 await.
    • 使用 Future API,具体描述,参考 库概览.

    await使用的时候 方法必须被标记为async

  • 处理 Stream
    • 当需要从 Stream 中获取数据值时, 可以通过一下两种方式:
    • 使用 async 和 一个 异步循环 (await for)。
    • 使用 Stream API, 更多详情,参考 in the library tour。
  • 生成器
    • 当您需要延迟生成( lazily produce )一系列值时, 可以考虑使用_生成器函数_。 Dart 内置支持两种生成器函数:
    • Synchronous 生成器: 返回一个 Iterable 对象。
    • Asynchronous 生成器: 返回一个 Stream 对象。
  • 所有 Dart 代码都在隔离区( isolates )内运行,而不是线程。 每个隔离区都有自己的内存堆,确保每个隔离区的状态都不会被其他隔离区访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值