• StreamBuilder 用法示例


    streambuilder 用法示例

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

    基本上它有两个参数。

    A Stream,
    A Builder,
    Flutter 中的流是什么?
    根据官方文档Stream将有如下定义

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

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

    有两种流:

    单一订阅:该流最多可以有一个侦听器。
    广播:该流的侦听器数量可能是无限的。
    Flutter 中的 Builder 是什么?
    Builder 基本上用于 将数据 流转换为Widget。

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

    StreamBuilder({
      Key key, 
      T initialData,
      Stream<T> stream, 
       AsyncWidgetBuilder<T> builder
     });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    特性:
    Key key:此属性 键 控制一个小部件如何替换树中的另一个小部件。
    T initialData:该属性是将用于创建初始快照的数据。提供此值(大概是在创建流时以某种方式同步获取的)可确保第一帧将显示有用的数据。否则,无论流上是否有可用值,都将使用 null 值构建第一帧:由于流是异步的,因此在初始构建之前无法从流中获取任何事件。
    AsyncWidgetBuilder builder:此属性指定此构建器当前使用的构建策略。它应该始终返回小部件,并且不应该有任何副作用,因为它将被多次调用。
    Stream Stream:此构建器当前连接的异步计算,可能为 null。更改后,如果前一个流不为空,则使用afterDisconnected 更新当前摘要,如果新流不为空,则使用afterConnected更新当前摘要。

    import 'dart:async';
    
    import 'package:flutter/material.dart';
    
    
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: StreamBuilderWidget(),
          ),
        );
      }
    
    }
    
    
    
    class StreamBuilderWidget extends StatefulWidget {
    
      
      _StreamBuilderWidgetState createState() => _StreamBuilderWidgetState();
    }
    
    class _StreamBuilderWidgetState extends State<StreamBuilderWidget> {
      int _counter = 0;
      final StreamController<int> _events =StreamController<int>();
    
      
      initState() {
        super.initState();
        _events.add(0);
      }
    
      void _incrementCounter() {
        _counter++;
        _events.add(_counter);
      }
      
      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,),
            )
    
        );
      }
    }
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

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

  • 相关阅读:
    React-18--css in js
    《linux内核设计与实现》 读书笔记
    数据结构--字符串的模式匹配
    C++ Builder XE RzCheckTree1的树形显示用法
    STL常用算法——查找算法
    图数据库知识点1:图数据库与关系型数据库区别
    文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题
    强化学习中值的迭代
    全志R128芯片应用开发案例——驱动 WS2812 流水灯
    城市道路拥堵终结者,智能停车场系统组网解决方案
  • 原文地址:https://blog.csdn.net/shelutai/article/details/133808049