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

如需转载,请注明出处: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判断异步任务是否有错误等等

       

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

 

版权声明:本文为upwgh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/upwgh/p/13100886.html