Flutter: FutureBuilder获取异步数据

和WEB前端的Apollo差不多

import 'package:flutter/material.dart';

void main() => runApp(Myapp());

class Myapp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyHome());
  }
}

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => _MyHomeState();
}

class _MyHomeState extends State<MyHome> {
  Future<String> _getData() async {
    await Future.delayed(Duration(seconds: 2));
    // return '异步数据';
    return Future.error('测试错误');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ListView'),
      ),
      body: ListView(
        children: <Widget>[
          FutureBuilder(
            future: _getData(),
            builder: (BuildContext context, AsyncSnapshot<String> s) {
              switch (s.connectionState) {
                case ConnectionState.none:
                  return Text('1. 当前未连接到任何异步计算');
                  break;
                case ConnectionState.waiting:
                  // 连接到异步计算并等待交互
                  return Text('2. 加载中。。。');
                  break;
                case ConnectionState.active:
                  return Text('3. 连接到活动的异步计算');
                  break;
                case ConnectionState.active:
                  return Text('4. 连接到终止的异步计算');
                  break;
                case ConnectionState.done:
                  if (s.hasError) {
                    return Text('Error: ${s.error}');
                  } else {
                    return Text(s.data);
                  }
                  break;
                default:
              }
            },
          ),
        ],
      ),
    );
  }
}

原文地址:https://www.cnblogs.com/ajanuw/p/10906061.html

时间: 2024-10-03 23:42:44

Flutter: FutureBuilder获取异步数据的相关文章

按顺序获取异步数据,可以用递归的方式

异步函数不应该用直接循环,不然项目的执行顺序是不确定的. 应该用递归: var arr = ["a","b","c"]; (function loop(index) { setTimeout(function(){//用setTimeout模拟异步函数 console.log(arr[index]); if (++index按顺序获取异步数据,可以用递归的方式 原文地址:https://www.cnblogs.com/fanbulaile/p/1

Nodejs 处理异步(获取异步数据并处理)的方法

方法1. 回调函数方式 将异步方法如readFile封装到一个自定义函数中,通过将异步方法得到的结果传给自定义方法的回调函数参数.具体如下(以fs模块的readFile方法为例): //封装 var func = function(filePath,callback){ fs.readFile(filePath, function(err, data){ if(err){ return false; } callback(data); }) } //调用 func('./a.txt', func

rxjs - 创建异步数据的Observable对象

一.interval和timer:用于定时产生数据 interval说明:它接收一个数值类型的参数,表示产生数据的间隔时间,单位为毫秒,返回的Observable对象就按照这个时间间隔来产生递增序列,从0开始,但是有限制. timer说明:第一个参数若为数值则单位为毫秒,表示间隔时间,产生一个数据0立即结束,若为Date类型的对象,则表示到这个时间点执行,第二个参数若传入,则类似于interval,表示产生数据的时间间隔,但是产生0的时间仍然是由第一个参数决定. 二.from:可把一切转成Obs

Swift - 异步获取网络数据封装类

使用NSURLConnection.sendAsynchronousRequest()可以采用异步获取的方式取得数据.下面通过对数据获取类进行封装,演示如何进行数据请求与接收. 1,HttpController.swift (数据获取封装类,结果处理协议) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import UIKit //自定义http协议 protocol HttpProto

Ajax异步获取html数据中包含js方法无效的解决方法

页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?method=GetList', data: {}, dataType: 'json', type: 'post', async: true, success: function (data) { //console.log(data); var parentStr = ''; $.each(data, funct

获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpRe

JSON异步获取网络数据

//定义一个方法来获取网络数据,接受参数为网址 func onSearch(url: String){ //定义一个NSURL var nsUrl: NSURL = NSURL(string: url)! //定义一个NSURLRequest var request: NSURLRequest = NSURLRequest(URL: nsUrl) //异步获取数据 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperatio

jQuery异步获取json数据的2种方式

jQuery异步获取json数据有2种方式,一个是$.getJSON方法,一个是$.ajax方法.本篇体验使用这2种方式异步获取json数据,然后追加到页面. 在根目录下创建data.json文件: { "one" : "Hello", "two" : "World" } ■ 通过$.getJSON方法获取json数据 <script src="Scripts/jquery-2.1.1.min.js"

Vue axios异步获取后台数据alert提示undefined

记录一个小问题,关于分页查询套餐 前台通过axios异步请求获取后台数据alert弹出数据提示undefined 下面有三个bean PageResult /** * 分页结果封装对象 */ public class PageResult implements Serializable { //总记录数 private Long total; //当前页结果 private List rows; //get,set方法省略 .... } QueryPageBean /** * 封装查询条件 */