Flutter中的StreamBuilder和FutureBuilder有什么区别

流行的跨平台框架 Flutter 为开发人员提供了两个强大的小部件来处理异步操作:StreamBuilderFutureBuilder。尽管它们有相似之处,但了解它们的不同之处,以便为您的特定用例选择合适的一个是至关重要的。在这篇博文中,我们将深入研究这两个小部件的特性和用法,让您全面了解何时使用它们。

FutureBuilder 简介

首先,让我们探索 FutureBuilder ,它是为处理将来返回单个值的异步操作而设计的。请按照以下步骤来利用 FutureBuilder 的强大功能:

  1. 当您有一个返回值的一次性异步操作(例如 HTTP 请求或从文件中读取)时,请使用 FutureBuilder
  2. 导入所需的依赖项:import 'dart:async';
  3. 创建一个 Future 对象来表示您要执行的异步操作。例如,您可以使用 http.get() 发出 HTTP 请求并获取响应。
  4. 将取决于未来结果的 UI 部分包装在 FutureBuilder 小部件内。

你最好理解这些代码。

打开您的 main.dart 文件并执行此代码,看看输出结果如何。

import 'package:flutter/material.dart';void main() => runApp(MaterialApp(home: HomePage()));class HomePage extends StatefulWidget {_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {int _count = 0; // used by StreamBuilderWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StreamBuilder VS FutureBuilder',style: TextStyle(fontSize: 18,color: Colors.black),),centerTitle: true,),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[_buildFutureBuilder(),],),);}// constructing FutureBuilderWidget _buildFutureBuilder() {return Center(child: FutureBuilder<int>(future: _calculateSquare(10),builder: (context, snapshot) {if (snapshot.connectionState == ConnectionState.done)return Text("Square = ${snapshot.data}",style: TextStyle(fontSize: 20,color: Colors.purple),);return CircularProgressIndicator(color: Colors.green,);},),);}// used by FutureBuilderFuture<int> _calculateSquare(int num) async {await Future.delayed(Duration(seconds: 5));return num * num;}}

输出:

StreamBuilder 简介

接下来,我们讨论 StreamBuilder ,它适合处理随着时间的推移产生多个值的异步操作。请按照以下步骤有效实施 StreamBuilder

  1. 当您拥有可随时间变化的异步数据流(例如来自数据库或 Web 服务的实时更新)时,请使用 StreamBuilder
  2. 导入所需的依赖项:import 'dart:async';
  3. 创建一个 Stream 对象来表示您要侦听的数据流。它可以是 StreamController 的实例,或者您可以使用 Stream.fromFutureStream.periodic 等内置流。
  4. 将依赖于 StreamBuilder 小部件内的流数据的 UI 部分包装起来。

好的,如果您看到代码,那么您会更好地理解我在说什么

import 'package:flutter/material.dart';void main() => runApp(MaterialApp(home: HomePage()));class HomePage extends StatefulWidget {_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {int _count = 0; // used by StreamBuilderWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StreamBuilder VS FutureBuilder',style: TextStyle(fontSize: 18,color: Colors.black),),centerTitle: true,),body: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[_buildStreamBuilder(),],),);}// constructing StreamBuilderWidget _buildStreamBuilder() {return Center(child: StreamBuilder<int>(stream: _stopwatch(),builder: (context, snapshot) {if (snapshot.connectionState == ConnectionState.active)return Text("Stopwatch = ${snapshot.data}",style: TextStyle(fontSize: 20,color: Colors.orange),);return CircularProgressIndicator();},),);}// used by StreamBuilderStream<int> _stopwatch() async* {while (true) {await Future.delayed(Duration(seconds: 1));yield _count++;}}
}

输出:

结论

总之, StreamBuilderFutureBuilder 都是 Flutter 中重要的 widget,用于处理异步操作并根据结果数据更新 UI。

我希望你现在了解什么是 StreamBuilderFutureBuilder,以及我们为什么和在哪里使用它们 ❤️❤️❤️。


原文:https://medium.com/@saurabhsinghaswal/what-is-difference-between-streambuilder-and-futurebuilder-in-flutter-2d6637583db1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157031.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Spring] SpringMVC 简介(二)

目录 五、域对象共享数据 1、使用 ServletAPI 向 request 域对象共享数据 2、使用 ModelAndView 向 request 域对象共享数据 3、使用 Model、Map、ModelMap 向 request 域对象共享数据 4、向 session 域和 application 域共享数据 六、SpringMVC 的视图 1、ThymeleafVie…

【运维笔记】linux同步时间

问题描述 电脑挂机一天&#xff0c;linux时间突然不同步了&#xff0c;需要同步时间 简单直接 systemctl restart ntpd.service &#xff08;其实还有其他很多方法&#xff0c;我先记录这一种&#xff09; 查看时间 timedate 同步前&#xff1a; 同步后

算法:深度优先遍历算法

本篇主要积累的是深度优先遍历算法 什么是深搜 深度优先搜索英文缩写为 DFS 即Depth First Search 其过程是对每一个可能的分支路径深入到不能再深入为止&#xff0c;而且每个节点只能访问一次 简单来说就是: 一路走到头&#xff0c;不撞墙不回头 典型题目积累 电话号码和…

UE4和C++ 开发-编程基础记录(UE4+代码基础知识)

1、UE4基础元素 ①Actor 我们又见面了Actor&#xff0c;Actor是在一个关卡中持续存在的&#xff0c;通常他包含几个Actor组件。支持网络复制和多人游戏。   Actor不包含位置&#xff0c;方向。这些东西在Root Component中存储。对于UE3 中的Pawn也由PlayerCharacter继承了…

B端产品需求分析的思路和方法 4大方面

需求分析对产品成功和客户满意度至关重要&#xff0c;它帮助团队深入了解用户需求&#xff0c;优化用户体验&#xff0c;减少开发中的需求变更&#xff0c;降低开发风险。如果缺乏产品分析&#xff0c;容易造成产品定位不准确&#xff0c;用户体验不佳&#xff0c;不能满足用户…

记一次fineBI的增量删除更新BUG

官方文档链接是https://help.fanruan.com/finebi/doc-view-1663.html 按照官方文档&#xff0c;增量删除不能使用select * &#xff0c;且需要指定分区建 但实际指定分区键有时候也会报错&#xff0c;因为表设置的字段有时候会比数据源少&#xff0c;此时会报错&#xff0c;提…

CRMEB多商户商城系统阿里云集群部署教程

注意: 1.所有服务创建时地域一定要选择一致,这里我用的是杭州K区 2.文件/图片上传一定要用类似oss的云文件服务, 本文不做演示 一、 创建容器镜像服务&#xff0c;容器镜像服务(aliyun.com) ,个人版本就可以 先创建一个命名空间 然后创建一个镜像仓库 查看并记录镜像公网地址…

一图看懂CodeArts Inspector 三大特性,带你玩转漏洞管理服务

华为云漏洞管理服务CodeArts Inspector是面向软件研发和服务运维提供的一站式漏洞管理能力&#xff0c;通过持续评估系统和应用等资产&#xff0c;内置风险量化管理和在线风险分析处置能力&#xff0c;帮助组织快速感应和响应漏洞&#xff0c;并及时有效地完成漏洞修复工作&…

纯Python代码超快速实现简易贪吃蛇小游戏-打发时间神器

当经典游戏遇上Python——体验十分钟构建自己的休闲娱乐贪吃蛇小游戏&#xff01; 话不多说&#xff0c;直接上源码&#xff0c;复制粘贴即可完美运行&#xff01;(如果你已经安装了pygame库) import pygame import time import randompygame.init()# 定义颜色 white (255, …

【学习笔记】DTM分布式事务

分布式事务是什么 本文的分布式事务指的是DTM下的分布式事务。 分布式事务有两类&#xff0c;这里指的是跨数据库、跨服务的分布式事务。 分布式事务指事务的发起者、资源及资源管理器和事务协调者分别位于分布式系统的不同节点之上。 CAP理论 C&#xff08;一致性&#x…

ACK 云原生 AI 套件:云原生 AI 工程化落地最优路径

作者&#xff1a;胡玉瑜(稚柳) 前言 在过去几年中&#xff0c;人工智能技术取得了突飞猛进的发展&#xff0c;涵盖了机器学习、深度学习和神经网络等关键技术的重大突破&#xff0c;这使得人工智能在各个领域都得到广泛应用&#xff0c;对各行各业产生了深远的影响。 特别值…

pycharm安装汉化包失败解决方法

在pycharm -setting-plugins-搜索“Chinese”进入此界面&#xff1a; 点击install&#xff0c;在安装时出现&#xff1a;Plugin "Chinese (Simplified) Language Pack / 中文语言包" was not installed: Invalid filename returned by a server 解决方法&#xff1a…

从零开始学习 Java:简单易懂的入门指南之线程同步(三十五)

线程同步 1.线程同步1.1卖票【应用】1.2卖票案例的问题1.3同步代码块解决数据安全问题【应用】1.4同步方法解决数据安全问题【应用】1.5Lock锁【应用】1.6死锁 2.生产者消费者2.1生产者和消费者模式概述【应用】2.2生产者和消费者案例【应用】2.3生产者和消费者案例优化【应用】…

产品经理进阶:如何写商业计划书?

目录 简介 确定目标 确定目标市场 竞争分析 CSDN学院 作者简介 简介 很多时候&#xff0c;我们缺乏的并不是创意。 因为任何人都可能会萌发出一个好的创意。 但是&#xff0c;将想法变成可行的业务就完全是另一码事了。 你可能会认为你自己已经做好充分准备&#xff0…

Android studio安装详细教程

Android studio安装详细教程 文章目录 Android studio安装详细教程一、下载Android studio二、安装Android Studio三、启动Android Studio 一、下载Android studio Android studio安装的前提是必须保证安装了jdk1.8版本以上 1、打开android studio的官网&#xff1a;Download…

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看

首先我们看到账号密码有提示了 我们bp爆破一下 我首先对数字爆破 因为全字符的话太多了 爆出来了哦 所以账号密码也出来了 zhangwei zhangwei666 没有什么用啊 扫一下吧 有git git泄露 那泄露看看 真有 <?php include "mysql.php"; session_start(); if(…

selenium打开火狐浏览器

项目上需求为&#xff1a;甲方OA 系统是IE系统&#xff0c;需要从IE系统点个按钮打开火狐浏览器单点登录跳转到我们的系统 前期解决方案为&#xff1a;打开浏览器就行了&#xff0c;然后就用的是打开本地浏览器&#xff0c;但是由于B/S架构&#xff0c;有别人远程访问我的ip来…

WPF中的多重绑定

MultiBinding 将会给后端传回一个数组, 其顺序为绑定的顺序. 例如: <DataGridMargin"10"AutoGenerateColumns"False"ItemsSource"{Binding Stu}"><DataGrid.Columns><DataGridTextColumn Binding"{Binding Id}" Header…

伦敦银单位转换很简单

伦敦银源自于英国伦敦的电子化的白银投资方式&#xff0c;高杠杆和高收益的它的基本属性&#xff0c;但有别于国内大家所熟悉的投资品种&#xff0c;伦敦银在交易过程中有很多不一样的地方&#xff0c;需要大家地去留意。 比如伦敦银的计价单位是盎司&#xff0c;而且具体来说…

数据报表的种类

根据报表使用频率不同&#xff0c;目的不同&#xff0c;使用群体不同&#xff0c;细化程度不同等情况&#xff0c;一般数据报表可以分为日常报表和临时报表&#xff0c;日常报表又分为管理报表和专题分析报表。 1. 日常报表 日常报表通常是指使用频率较高&#xff08;一般取3…