StreamBuilder 用法示例

streambuilder 用法示例

Flutter 中的 StreamBuilder Widget 是什么?

StreamBuilder Widget是一个 响应 数据异步处理的StatefulWidget 。换句话说,我们可以说它能够保留"运行摘要"和/或记录并记录数据流中的"最新数据项"。

基本上它有两个参数。

A Stream,

A Builder,

Flutter 中的流是什么?

根据官方文档Stream将有如下定义

" Stream提供了一种接收事件序列的方法。每个事件要么是数据事件(也称为流的元素),要么是错误事件(这是某件事情失败的通知)。当流发出其所有事件时,单个"完成"事件将通知侦听器已到达末尾"

简而言之,我们可以说Stream就像一个管道,用户可以在其中一端输入一个值,而在另一端监听器,监听器将接收该值。Steam 还可以有多个侦听器,并且当您将其放入管道时,所有侦听器可以具有相同的值。

有两种流:

单一订阅:该流最多可以有一个侦听器。

广播:该流的侦听器数量可能是无限的。

Flutter 中的 Builder 是什么?

Builder 基本上用于 将数据 流转换为Widget。

StreamBuilder Widget的默认构造函数如下所示:

dart 复制代码
StreamBuilder({
  Key key, 
  T initialData,
  Stream<T> stream, 
  @required AsyncWidgetBuilder<T> builder
 });

在上面的构造函数中,所有带有@required标记的字段都不能为空。现在让我们详细了解每个属性。

特性:

Key key:此属性 键 控制一个小部件如何替换树中的另一个小部件。

T initialData:该属性是将用于创建初始快照的数据。提供此值(大概是在创建流时以某种方式同步获取的)可确保第一帧将显示有用的数据。否则,无论流上是否有可用值,都将使用 null 值构建第一帧:由于流是异步的,因此在初始构建之前无法从流中获取任何事件。

AsyncWidgetBuilder builder:此属性指定此构建器当前使用的构建策略。它应该始终返回小部件,并且不应该有任何副作用,因为它将被多次调用。

Stream Stream:此构建器当前连接的异步计算,可能为 null。更改后,如果前一个流不为空,则使用afterDisconnected 更新当前摘要,如果新流不为空,则使用afterConnected更新当前摘要。

dart 复制代码
import 'dart:async';

import 'package:flutter/material.dart';



void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: StreamBuilderWidget(),
      ),
    );
  }

}



class StreamBuilderWidget extends StatefulWidget {

  @override
  _StreamBuilderWidgetState createState() => _StreamBuilderWidgetState();
}

class _StreamBuilderWidgetState extends State<StreamBuilderWidget> {
  int _counter = 0;
  final StreamController<int> _events =StreamController<int>();

  @override
  initState() {
    super.initState();
    _events.add(0);
  }

  void _incrementCounter() {
    _counter++;
    _events.add(_counter);
  }
  @override
  Widget build(BuildContext context) {
    return  Scaffold(
        body:Center(
          child: new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              new Text(
                'You have pushed the button this many times:',
              ),
              StreamBuilder(
                stream: _events.stream,
                builder: (BuildContext context, snapshot) {
                  return new Text(
                    snapshot.data.toString()
                  );
                },
              ),
            ],
          ),
        ),
        floatingActionButton: new FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Increment',
          child: new Icon(Icons.add,),
        )

    );
  }
}

参考:

https://flutteragency.com/streambuilder-widget/

相关推荐
—Qeyser1 小时前
Flutter Text 文本组件完全指南
开发语言·javascript·flutter
猛扇赵四那边好嘴.1 小时前
Flutter 框架跨平台鸿蒙开发 - 书籍借阅管理器应用开发教程
flutter·华为·harmonyos
夜雨声烦丿2 小时前
Flutter 框架跨平台鸿蒙开发 - 日期计算器应用开发教程
flutter·华为·harmonyos
AI_零食2 小时前
鸿蒙的flutter框架表达:生命律动系统
学习·flutter·ui·华为·harmonyos·鸿蒙
AI_零食2 小时前
鸿蒙跨端框架 Flutter 学习 Day 6:Future 在 UI 渲染中的心跳逻辑
学习·flutter·ui·华为·harmonyos·鸿蒙
[H*]2 小时前
Flutter框架跨平台鸿蒙开发——文本溢出处理
flutter
夜雨声烦丿2 小时前
Flutter 框架跨平台鸿蒙开发 - 文字反转工具应用开发教程
flutter·华为·harmonyos
南村群童欺我老无力.3 小时前
Flutter 框架跨平台鸿蒙开发 - 虚拟骰子应用开发教程
flutter·华为·harmonyos
LawrenceLan3 小时前
Flutter 零基础入门(二十三):Icon、Image 与资源管理
开发语言·前端·flutter·dart
lbb 小魔仙3 小时前
【Harmonyos】开源鸿蒙跨平台训练营DAY2:多终端工程创建运行、代码提交至AtomGit平台自建公开仓库全流程(附带出现问题及解决方法)
windows·flutter·开源·harmonyos·鸿蒙·开源鸿蒙·鸿蒙开平台应用