Flutter异步加载:Future,async/await

摘要:Future对象表示异步操作的结果,我们通常通过then()来处理返回的结果;async用于标明函数是一个异步函数,其返回值类型是Future对象;await用来等待耗时操作的返回结果,这个操作会阻塞到后面的代码

概念

Future对象表示异步操作的结果,我们通常通过then()来处理返回的结果
async用于标明函数是一个异步函数,其返回值类型是Future对象
await用来等待耗时操作的返回结果,这个操作会阻塞到后面的代码


三种方式

async/await
Future
FutureBuilder


async/await

被async修饰的函数,会返回一个Futured对象

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
        _getData();
      }
    
      _getData() async{
        // http.get返回的是一个Future
        var response = await http.get(url);
        print(response.body);
      }


Future

顾名思义就是指在不远的将来去执行,不会立刻去执行

这里的.then和Promise中的.then极其类似

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
        _getData();
      }
    
      _getData() {
        // http.get返回的是一个Future,当拿到数据后在.then中返回
        http.get(url).then((response){
          print(response.body);
        });
      }


FutureBuilder

    final String url = 'http://jsonplaceholder.typicode.com/posts';
    
      @override
      void initState() {
        super.initState();
      }
    
      _getData() {
        return http.get(url);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text('首页'),),
            body: FutureBuilder(future: _getData(), builder: (context, snap){
              if(!snap.hasData) {
                return Container();
              }
              var response = snap.data;
              print(response.body);
              return Container();
            })
        );
      }

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_4429