Flutter Stream 简单的使用

全面解析Flutter中的Stream用法及实际应用 1. 什么是Stream?在 Flutter 中,Stream 是一种用于处理异步数据流的工具。它的作用类似广播频道,允许连续推送数据流,并让其他部分实时监听这些数据。Stream 广泛应用于需要异步处理的场景,比如网络请求、用户输入、数据流实时更新等。2. Stream的分类。 阅读详情

一  简单使用

import 'dart:async';

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  /// 1 创建
  StreamController<List<String>> _dataController = StreamController();

  /// 2 获取streamSink 做 add 入口
  StreamSink get _dataSink => _dataController.sink;

  /// 3 获取Stream 用于监听
  Stream<List<String>> get _dataStream => _dataController.stream;

  /// 4 事件订阅对象
  StreamSubscription? _dataSubScription;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    // 监听事件
    _dataSubScription = _dataStream.listen((event) {
      print(event);
    });
  }

  onClick() {
    // 改变事件
    _dataSink.add(["111"]);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("data"),
        ),
        body: Column(
          children: [ElevatedButton(onPressed: onClick, child: Text("触发事件"))],
        ));
  }

  @override
  void dispose() {
    // TODO: implement dispose
    _dataSubScription!.cancel();
    _dataController.close();
    super.dispose();
  }
}

二 一个栗子

请求网络数据创建流

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  static Dio _dio =
      Dio(BaseOptions(baseUrl: "https://interface.meiriyiwen.com"));

  static Future<Map> _getArtical() async {
    Response response =
        await _dio.get('/article/random', queryParameters: {"dev": 1});
    final data = response.data['data'];
    return data;
  }

  Stream<Map>? _futureStream;

  @override
  void initState() {
    // TODO: implement initState
    List<Future<Map>> futures = [];
    for (var i = 0; i < 10; i++) {
      // 添加future
      futures.add(_getArtical());
    }
    // 生成Stream
    _futureStream = Stream<Map>.fromFutures(futures);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Random Artical"),
        ),
        body: SingleChildScrollView(
          child: Center(
            child: StreamBuilder(
              stream: _futureStream,
              builder: (context, AsyncSnapshot snapshot) {
                if (snapshot.hasData) {
                  Map article = snapshot.data;
                  return Container(
                    child: Column(
                      children: [
                        Text(article["title"]),
                        Text(article['content'])
                      ],
                    ),
                  );
                }
                return CircularProgressIndicator();
              },
            ),
          ),
        ));
  }

  @override
  void dispose() {
    // TODO: implement dispose

    super.dispose();
  }
}

 

Flutter - Stream 浅析 Stream Stream 是 Dart 提供的一种数据流订阅管理的"工具",Stream 可以接收任何对象,接收的对象通过 StreamController 的 sink 进行添加,然后通过 StreamController 发送给 Stream,通过 listen 进行监听,listen 会返回一个 StreamSubscription 对象,StreamSubscription 可以操作对数据流的监听,例如 pause,resume,cancel 等 分类 Single-subscription 阅读详情

相关推荐

Flutter--Stream

创建和监听,暂停恢复/取消监听 Stream _streamDemo = Stream.fromFuture(fetchData()); _streamDemo.listen(onData, onError: onError, onDone: onDone); 添加订阅 StreamController 控制管理Stream 使用 Sink 往 Stream 上添加数据 创建可以多次订...

活着就是应该在解放自我 1257

Flutter-Stream使用

在 Flutter 中有两种处理异步操作的方式 和 , 用于处理单个异步操作, 用来处理连续的异步操作。比如往水杯倒水,将一个水杯倒满为一个 ,连续的将多个水杯倒满就是 。 就是事件流或者管道,事件流相信大家并不陌生,简单的说就是:基于事件流驱动设计代码,然后监听订阅事件,并针对事件变换处理响应。Flutter 中,整个 设计外部暴露的对象主要如下图,主要包含了 、 、 、 四个对象。有一个事件源叫 ,为了方便控制 ,官方提供了使用 作为管理;同时它对外提供了 对象作为事件输入口,可通过 属性访

Dream It Possible 5277

flutter Stream 入门程序

flutter Stream 介绍 本篇文章将会详细说明flutter中stream的基本使用 Flutter 中,整个 Stream 主要包含了 StreamController、Sink 、Stream 、StreamSubscription 四个对象,通过这四个对象来操控整个Stream的运行。 StreamController 有一个事件源叫 Stream,为了方便控制 Stream ...

mint_sprite的博客 1856

【Flutter 异步编程 - 叁】 | 初步认识 Stream 类的使用

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究! 张风捷特烈 - 出品 一、分析 Stream 对象 要了解一个事物,最好去思考它存在的 价值 。当你可以意识到某个事物的作用,缺少它会有什么弊端,自然会有兴趣去了解它。而不是稀里糊涂的看别人怎么用,自己死记硬背 API 有哪些,分别表示什么意思。一味...

张风捷特烈的博客 484

Flutter Stream 简介及部分操作符使用(1)

这是一种特定的可以用于监听数据流的方式,和 forEach循环的效果一致,但是返回的是对象,如下也会输出0-9,同时打印出 ”流已完成“看一下源码这种方式可以接收1.onData是接收到数据的处理,必须要实现的方法2.onError流发生错误时候的处理3.onDone流完成时候调取4.发生错误的时候是否立马终止print(“流发生错误”);print(“流已完成”);​这中操作和listen()的方式基本差不多,也是一种监听流的方式,这只是监听了。

m0_57541068的博客 497

【Flutter】Flutter 使用 Stream Transform 包处理流操作

Stream Transform 包提供了一系列的扩展方法,这些方法可以直接应用于任何 Stream 对象。这些方法包括但不限于:异步映射、值的收集和发射、阻止事件的重叠执行等等。这些功能强大的操作,可以帮助我们更方便、更高效地处理数据流。

Code Metaverse 1485

Flutter中stream学习

Stream 主要应用于 Flutter 的异步操作,在其他编程语言中也存在;Stream 提供了一种接受事件队列的方法,可通过 listen 进行数据监听,通过 error 接收失败状态,通过 done 来接收结束状态;

yong_19930826的博客 1040

flutter 异步Stream以及StreamBuilder组件的使用

前言 在Dart中Stream 也是用于接收异步事件数据,和Future 不同的是,它可以接收多个异步操作的结果,它常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。 即Future可以给我们一个值,但Stream会给我们多个值。 Stream 如何监听Stream 监听数据流的两种方式: 1,stream.listen 2,StreamBuilder 比如:每隔1秒钟后返回一个数字: final future = Future.delayed(Duration(seconds:1), ()=

智玲君 1092

Flutter Stream简单应用

Stream是什么? 为了将Stream的概念可视化与简单化,可以将它想成是管道(pipe)的两端,它只允许从一端插入数据并通过管道从另外一端流出数据。 在Flutter中, 我们将这样的管道称作Stream; 为了控制Stream,我们通常可以使用StreamController来进行管理; 为了向Stream中插入数据,StreamController提供了类型为StreamSink的属性sink作为入口; StreamController提供stream属性作为数据的出口。 在Dart库中,

丿灬安之若死 394

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

手把手教你用VMware虚拟机搭建PCAN开发环境:从Ubuntu安装到CAN通讯实战

本文详细指导如何在VMware虚拟机中搭建PCAN开发环境,涵盖从Ubuntu系统安装、VMware精细配置、PCAN-USB设备直通,到Linux驱动编译、can-utils工具集使用及完整CAN通讯测试的全过程。通过实战步骤与故障排查技巧,帮助开发者快速构建稳定高效的CAN总线开发与测试沙盒,特别适合车载诊断与嵌入式通讯应用。

weixin_29216353的博客 221

flutter之stream

1.前言 在Dart库中,有两种实现异步编程的方式(Future和Stream),使用它们只需要在代码中引入dart:async即可。 本文主要介绍Stream的相关概念及利用其异步特性来实现简单的响应式编程。 2.什么是Stream? 为了将Stream的概念可视化与简单化,可以将它想成是管道(pipe)的两端,它只允许从一端插入数据并通过管道从另外一端流出数据。 在Flutter中, 我们将这样的管道称作Stream; 为了控制Stream,我们通常可以使用StreamController来进

sundaysme的博客 2511

第三课 NXP S32K144 MCAL 集成到Vector davinci SIP-第一弹

将NXP S32K144 MCAL 集成到Vector davinci SIP的第三方库,导出ARXMl给Vector davinci SIP使用

candleer的博客 5855

Flutter Stream 简介及部分操作符使用

前言 对于刚接触Flutter的同学来说,Stream(流)是一个相对比较抽象,也相对比较难以理解的东西。准确的来说Stream并不是Flutter的特性,而是Dart语言自身所带库。Stream和Future都位于dart:async核心库,是Dart中异步操作的两大高手。所以不仅仅可以用于Flutter,而是可以用于任何Dart语言上的实现。 在我们刚开始学习Flutter的...

weixin_30586085的博客 2080

东华大学2020考研计算机OJ题目解答分享——进阶篇(4)

4 一个月的天数 作者: Turbo时间限制: 1S章节: 分支结构 问题描述 : 输入年和月,输出该月有几天。 输入说明 : 输入两个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月。 输出说明 : 输出该年该月的天数,输出时,行首与行尾均无空格,仅输出一个整数。 输入范例 : 2000 2 输出范例 : 29 解答思路: 闰年和质数出题一样频繁,简单必会 AC代码 #include...

qq_38344326的博客 472

Codex接入CCSwitch:本地代理与模型路由配置指南

在AI编程工具链中,本地代理与模型路由是连接智能体与模型服务的核心桥梁。Codex作为OpenAI推出的编程智能体,虽然具备强大的仓库理解和自主编码能力,但其默认模型链路固定,导致在多模型切换、内网统一管理及成本控制上存在天然瓶颈。CCSwitch正是为解决这一痛点而生的本地代理工具,它通过OpenAI兼容协议将Codex的请求透明转发至DeepSeek、通义千问等第三方模型服务,使模型切换如同点击按钮般简单。本文从本地代理和模型路由器的基础原理切入,系统讲解Codex与CCSwitch的安装配置、模型ID

weixin_33910460的博客 427

flutter Stream流的理解和运用

1.Stream和Future区别 Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的 Future。该 Future 会在结果准备好时通知调用者。 Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable,不同的是当你向 Iterable 获取下一个事件时它会立即给你,但是 Stream 则不会立即给你而是在它准备好时告诉你。 2.Stream分类 流可以分为两类: 单订阅流(Single Subscription),

ZhangWes的博客 3392

开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

lemontree1945的博客 1922

Flutter----Stream讲解

Stream Stream在Flutter中也是属于非常关键的概念,就好比前面我有写过一篇event_bus的文章,我就是用Stream去做的,有兴趣的可以去前面看看。 在Flutter中,状态管理出了本身自带的InheritedWidget之外,还有什么rxdart,Bolc,redux,provider以及别的大佬们写的插件。但是不管是什么状态管理的模式,我看到的基本都是离不开Stream的封...

mubowen666的博客 3330

Hypack 应用于地形测量的高级设置操作要领

Hypack 是业界公认最好的水文导航测量软件,是目前世界上应用广泛的专业测量疏浚软件。它能够接收,处理,存储和输出各种数据。Hypack支持绝大部分GPS,测深仪(国内如海鹰HY1603单波束测沙仪),多波束测深仪,旁扫声纳,涌浪补偿器,水位仪,验潮仪以及声速剖面仪。利用 Hypack 可以进行导航,单波束测量,多波束测量,旁扫测量以及疏浚实时监测等。软件界面友好,使用方便。本文简要阐述Hypack 应用于地形测量的几个重要操作要领。

中游鱼的博客 2793

D457深度相机调试记录(max96712+max9295A)

使用max96712解串器解4路D457相机。采集深度相机Depth和RGB流。

navy2015_163的博客 1263

flutter Stream流

在flutter中 stream是很中重要的,在现在市场面flutter中的状态管理框架基本上都是用stream流来实现的 Stream分类 流可以分为两类: 单订阅流(Single Subscription),这种流最多只能有一个监听器(listener) 多订阅流(Broadcast),这种流可以有多个监听器监听(listener) Stream创建方式 stream创建有很多种,Stream.fromFuture、Stream.fromIterable等方式,但是一般不使用这种,我们使用StreamC

lin_henry的博客 686

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Flutter进阶之全面深入理解Stream

通过上一篇文章我相信你也能了解到了Stream的用处,但是可能还是太懵,因为我说的有点多,就是一个简单的案例。刚好昨天晚上我翻了翻我曾经看过的大佬的文章,就找到了上篇文章所说的那个大佬。 感觉我看过的大佬都是喜欢用喵星人做为头像。 好了我们步入正题: 全面深入理解Stream 一. Stream由深入浅 Stream的基础概念和重要性我就不说了上一篇文章说过!!! 我们看下整个Stream设计外...

mubowen666的博客 1365

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

flutter中 数据流Stream

Flutter中的Stream是处理异步数据流的核心工具,相比Future能持续产生多个值。文章介绍了三种创建Stream的方法:async*生成器、StreamController和Future列表转换。重点讲解了Stream的监听订阅机制,包括listen方法的使用和状态管理,以及各种转换操作如where、map、take等。同时详细说明了StreamBuilder的实践应用,包括不同连接状态的处理和UI构建。最后强调了使用注意事项,如高频流控制、避免重复计算和及时取消订阅等。这些内容为Flutter开

梦想不只是梦与想的博客 358

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flutter使用Stream更新Widget UI

通过之前的两节课,相信你应该已经掌握了Stream的使用。这节课我们来看下如何使用在Flutter中使用Stream来更新Widget UI。 不过在这之前,我们可以先看下Flutter常规刷新界面的操作,通过对比我们能了解Stream的优势。 setState 当我们在Studio中创建一个Flutter项目时,Studio会默认给我们创建如下代码 从图中红色框的指示可以看出,在 Floati...

zxm317122667的专栏 1490
上一篇: Flutter Socket.io框架的使用
下一篇: Flutter 软键盘导致界面重绘的问题
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值