Flutter 学习基础 dart

var 赋值的时候确定类型 后面不能更改类型
Dynamic 可以接受任何类型 前面赋值一种类型 后面还可以修改类型
Object 基类 dart中都是类 可以接受任何变量

可选的位置参数 用[]标记为可选的位置参数,并放在参数列表的最后面

//定义
String say(String from, String msg, [String device]) {
}
//调用
say('Bob', 'Howdy'); 
say('Bob', 'Howdy', 'smoke signal');

可选的命名参数 定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数

//定义
void enableFlags({bool bold, bool hidden}) {
    // ... 
}
//调用
 enableFlags(bold: true, hidden: false);

Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类
定义了几个 mixin,然后通过 with 关键字将它们组合成不同的类 多个mixin 中有同名方法,with 时,会默认使用最后面的 mixin 的,mixin 方法中可以通过 super 关键字调用之前 mixin 或类中的方法
mixin 多继承demo

class Person {
  say() {
    print('say');
  }
}

mixin Eat {
  eat() {
    print('eat');
  }
}

mixin Walk {
  walk() {
    print('walk');
  }
}

mixin Code {
  code() {
    print('key');
  }
}

class Dog with Eat, Walk{}
class Man extends Person with Eat, Walk, Code{}

一个异步操作的最终完成(或失败)及其结果值的表示
wait 数组内请求结束后在执行then whenComplete

Future.wait([
//delayed 模拟网络请求
      Future.delayed(Duration(seconds: 1), () {
        print("1111");
        return "111";
      }),
      Future.delayed(Duration(seconds: 1), () {
        print("2222");
        return "222";
      })
    ]).then((value) {
      print("value====$value");
    }).catchError((error) {
      print("error===$error");
    }).whenComplete(() {
      print('await finish');
    });

Future.delayed(Duration(seconds: 2), () {
      return 'hello $_counter';
      // throw AssertionError("Error");
    }).then((value) {
      print("value===$value");
    }, onError: (error) {
      print(error);
    }).catchError((e) {
      print("e==$e");
    }).whenComplete(() {
      print('finish');
    });

解决嵌套地狱

//先分别定义各个异步任务
Future login(String userName, String pwd){

    //用户登录
};
Future getUserInfo(String id){

    //获取用户信息 
};
Future saveUserInfo(String userInfo){

    // 保存用户信息 
};

解决嵌套地狱的两种方式
方式一

login("alice","******").then((id){
    return getUserInfo(id);
}).then((userInfo){
    return saveUserInfo(userInfo);
}).then((e){
   //执行接下来的操作 
}).catchError((e){
  //错误处理  
  print(e);
});

方式二任务依赖(可以实现类似同步代码的方式实现异步)

task() async {
   try{
    String id = await login("alice","******");
    String userInfo = await getUserInfo(id);
    await saveUserInfo(userInfo);
    //执行接下来的操作   
   } catch(e){
    //错误处理   
    print(e);   
   }  
}

*用来表示函数是异步的,定义的函数会返回一个Future对象,可以使用 then 方法添加回调函数。

  • 后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走;await必须出现在 async 函数内部

不同的是,它可以接收多个异步操作的结果,常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写

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: (){

});

你可能感兴趣的:(Flutter 学习基础 dart)