zoukankan      html  css  js  c++  java
  • Flutter学习笔记(31)--异步更新UI

    如需转载,请注明出处:Flutter学习笔记(31)--异步更新UI

    大家都知道,子线程不能操作UI控件,在我们Android的日常开发中,经常会遇到网络请求数据通过线程间通信,将数据发送到UI线程中去更新UI,在Flutter中是如何处理异步更新UI的呢?

    今天我们介绍一下FutureBuilder。

      const FutureBuilder({
        Key key,
        this.future,
        this.initialData,
        @required this.builder,
      })

    构造参数说明:

    feture:接收一个Future对象,用于处理耗时操作。

    initialData:默认数据。

    builder:widget构建器,会在future的不同阶段多次调用。构建器签名如下:

    Widget Function(BuildContext context, AsyncSnapshot<T> snapshot);

    模拟一个网络请求数据回来后更新UI的场景,先看下整体的示例

    import 'dart:async';
    
    import 'package:flutter/material.dart';
    
    class FutureBuilderDemo extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return new _FutureBuilderDemoState();
      }
    }
    
    class _FutureBuilderDemoState extends State {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'FutureBuilderDemo',
          home: new Scaffold(
            appBar: AppBar(
              title: new Text('FutureBuilderDemo'),
            ),
            body: new Center(
              child: FutureBuilder<String>(
                future: mockNetworkData(),
                initialData: '我是默认的数据',
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (snapshot.hasError) {
                    return new Text('erro');
                  } else {
                    return new Text(snapshot.data);
                  }
                },
              ),
            ),
          ),
        );
      }
    
      Future<String> mockNetworkData() async {
        return Future.delayed(Duration(seconds: 11), () => '我是网络请求的数据');
      }
    }

     snapshot:会包含当前异步任务的状态信息及结果信息 ,比如我们可以通过snapshot.connectionState获取异步任务的状态信息、通过snapshot.hasError判断异步任务是否有错误等等

           

    以上就是今天下拉刷新和上拉加载的全部内容了,如果有错误的地方或者有任何疑问,欢迎留言!!!

  • 相关阅读:
    将n个不同的球放到m个相同的袋子里有多少种方案?

    平面分割直线2
    差分
    并查集(UnionFind)
    约瑟夫环公式
    Kruskal
    线性欧拉筛
    SPAF
    Dijkstra
  • 原文地址:https://www.cnblogs.com/upwgh/p/13100886.html
Copyright © 2011-2022 走看看