先看代码
push到一个新的页面,然后手动pop返回一个字符串
push_future() async{
print("1111");
var result = await Navigator.push(context, MaterialPageRoute(builder: (context){
return NextPage();
}));
print("result:${result}");
print("2222");
}
调用方法
var fun = push_future();
print("fun:${fun}");
打印如下:
第三行开始是在二级页面pop之后才打印的
flutter: 1111
flutter: fun:Instance of 'Future<dynamic>'
flutter: result:next pop
flutter: 2222
得出:
- 用来表示函数是异步的,定义的函数会返回一个Future对象,可以使用then方法添加回调函数
- 后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走;await必须出现在 async 函数内部
可以看到,我们通过async/await将一个异步流用同步的代码表示出来了
其实,无论是在JavaScript还是Dart中,async/await都只是一个语法糖,编译器或解释器最终都会将其转化为一个Promise(Future)的调用链。
如果是获取网络数据,就不能如上了,因为返回的是Future对象
定义一个全局变量netData 接受比较好
get_net_right_data() async {
print("1111_right");
netData = await Future.delayed(Duration(seconds: 2),(){
return '网络数据获取到了';
});
print("netData:${netData}");
return netData;
}