dart常用语法

1. ?.和??和??=

A?.B表示A如果为null则返回null,A不为null返回A.B

A??B表示A如果为null则返回B,否则返回A,和java或者c中的 A!=null? A : B 同义

A??=B表示A如果为null则将B赋值给A

2.mixin关键字

mixin和abstract class 代表的意思差不多,但是区别是mixin的类可以有默认的方法实现

mixin A on B,表示A只能在B类或者B的子类上被实现

class B with A,C,D,表示B实现了A、C、D三个类的接口,假如A、C、D中存在相同的方法,则在B中调用时会调用D中的该方法。

3.Timer.run((){})和Timer.run(Duration(), (){})

4.异步、多线程

普通轻量任务用

Future<String>( () async { 
    await Future.delayed(Duration(seconds: 5)); //故意等待5秒(只模拟未知时间,并没有多大计算量)
    return "一个假设的计算结果";
}).then((value) {
    print("${DateTime.now()} 返回 :$value");
});

print("${DateTime.now()} 这里没有等待");

或者

SchedulerBinding.instance.scheduleTask<String>( () { 
    return "一个假设的计算结果";
}, Priority.idle)
.then( (value) {
    print("返回 :$value");
});

特别耗时的任务用Isolate(类似java Thread)

void main() {
  ReceivePort port = ReceivePort();//dart线程间不共享内存,需要用port传递数据
  Isolate.spawn(test, port.sendPort).then( (isolate) {
    port.listen((data) {
      print("$data"); //接收子线程的数据
      port.close();
      isolate.kill();
    });
  });
}

void test(SendPort port){
  port.send('改一下');
}

或者简化版compute(flutter SDK内置的Isolate封装方法)

void main() {
  compute(test,'www.baidu.com');
}

void test(String url){
  print(url);
}

5.dart适合rx的语法,异步请求可使用then来依次完成多个请求

HttpService.getInstance()
    .getAppService()
    .getUser()//异步
    .then((result){
        //todo异步再处理
    })
    .then((){
        //todo最终结果
    });...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值