Flutter 组件之 FutureBuilder

FutureBuilder是一个用于异步操作的Flutter组件,它将网络请求、数据库读取等的结果实时更新到用户界面。组件包含future属性用于指定异步任务,initialData用于设置初始数据,而builder则用于构建视图。在不同的ConnectionState下,如none、active、waiting和done,FutureBuilder会显示相应状态的UI。

Flutter 组件之 FutureBuilder

1.简介

是一个将异步操作和异步UI更新结合在一起的类,通过它我们可以将网络请求,数据库读取等的结果更新到用户页面上。

2.属性

  • future:获取用户异步处理获得数据的代码
  • initialData:初始化数据
  • builder:构建组件

3.使用

在这里插入图片描述

第二种判断方法
Future执行到那个阶段了:
ConnectionState.none 没有连接到任何异步任务
ConnectionState.active 已连接到异步任务等待被交互
ConnectionState.waiting 已连接到一个已激活的异步任务
ConnectionState.done 已连接到一个已结束的异步任务

// 当请求还在执行时 显示等待动画
if(snapshot.connectionState == ConnectionState.waiting){
   return CircularProgressIndicator();
 }
 // ConnectionState.done只表示Future执行完了 对错不知道
 if (snapshot.connectionState == ConnectionState.done) {
   // 所以要在里面加一个判断,如果错误不为空
   if (snapshot.error != null) {
     return Text("请求出错");
   }
   return Text("$a");
 }

当设置initialData时等待动画CircularProgressIndicator将失效
在这里插入图片描述

把上面图片里的模拟请求时长过慢注释放开后
在这里插入图片描述

FutureBuilderFlutter 中一个常用的小部件,用于异步构建基于 Future 的数据的用户界面,能根据 Future 的状态(未完成、正在加载、完成、出错)动态更新 UI [^1]。 ### 构造方法 FutureBuilder 的构造方法如下: ```dart const FutureBuilder({ Key? key, this.future, this.initialData, required this.builder, }) : assert(builder != null), super(key: key); ``` 其中: - `future`:`Future<T>` 类型,是待执行的异步任务 [^3][^4]。 - `initialData`:`T` 类型,为初始数据 [^3][^4]。 - `builder`:`AsyncWidgetBuilder<T>` 类型,是异步组件构造器 [^3][^4]。 ### 基本使用示例 ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('FutureBuilder Example'), ), body: Center( child: FutureBuilder( // 模拟一个异步任务 future: Future.delayed(Duration(seconds: 2), () => 'Data loaded'), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return CircularProgressIndicator(); } else if (snapshot.hasError) { return Text('Error: ${snapshot.error}'); } else { return Text('Data: ${snapshot.data}'); } }, ), ), ), ); } } ``` 在上述示例中,`Future.delayed` 模拟了一个异步任务,延迟 2 秒后返回字符串 `'Data loaded'`。`builder` 函数根据 `AsyncSnapshot` 的状态来构建不同的 UI: - 当 `connectionState` 为 `ConnectionState.waiting` 时,表示异步任务正在进行,显示 `CircularProgressIndicator`。 - 当 `hasError` 为 `true` 时,表示异步任务出错,显示错误信息。 - 当异步任务成功完成时,显示返回的数据。 ### 原理 FutureBuilder 是一个 `StatefulWidget`,它会监听 `future` 的状态变化。当 `future` 的状态发生改变时,`State` 会重新构建,调用 `builder` 函数,根据 `AsyncSnapshot` 的状态来更新 UI [^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值