Flutter學習筆記(31)--異步更新UI

如需轉載,請註明出處:Flutter學習筆記(31)--異步更新UIhtml

你們都知道,子線程不能操做UI控件,在咱們Android的平常開發中,常常會遇到網絡請求數據經過線程間通訊,將數據發送到UI線程中去更新UI,在Flutter中是如何處理異步更新UI的呢?網絡

今天咱們介紹一下FutureBuilder。app

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

構造參數說明:異步

feture:接收一個Future對象,用於處理耗時操做。async

initialData:默認數據。ide

builder:widget構建器,會在future的不一樣階段屢次調用。構建器簽名以下:post

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判斷異步任務是否有錯誤等等ui

       

以上就是今天下拉刷新和上拉加載的所有內容了,若是有錯誤的地方或者有任何疑問,歡迎留言!!!this

相關文章
相關標籤/搜索