Flutter StreamBuilder 在初始化时调用两次

2023-11-23

StreamBuilder 总是被调用两次吗?一次用于初始数据,然后一次用于输入流?

初始化下面的StreamBuilder可以看出build方法被调用了两次。第二次调用比第一次调用晚了 0.4 秒。

流:内部版本 1566239814897

流:内部版本 1566239815284

import 'dart:async';
import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:nocd/utils/bloc_provider.dart';

void main() =>
    runApp(BlocProvider<MyAppBloc>(bloc: MyAppBloc(), child: MyApp()));

class MyAppBloc extends BlocBase {
  String _page = window.defaultRouteName ?? "";

  /// Stream for [getPage].
  StreamController<String> pageController = StreamController<String>();

  /// Observable navigation route value.
  Stream get getPage => pageController.stream;

  MyAppBloc() {}

  @override
  void dispose() {
    pageController.close();
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final MyAppBloc myAppBloc = BlocProvider.of<MyAppBloc>(context);
    return StreamBuilder(
      stream: myAppBloc.getPage,
      initialData: "Build",
      builder: (context, snapshot) {
        print("Stream: " +
            snapshot.data +
            DateTime.now().millisecondsSinceEpoch.toString());
        return Container();
      },
    );
  }
}

为什么 StreamBuilder 被调用两次?


Streambuilder 将被调用两次,第一次用于初始,第二次用于流。并且数据仅在状态时改变连接状态.活动。请参阅官方文档示例。

    StreamBuilder<int>(
  //stream:fire, // a Stream<int> or null
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) return Text('Error: ${snapshot.error}');
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Select lot');
      case ConnectionState.waiting:
        return Text('Awaiting bids...');
      case ConnectionState.active:
        return Text('\$${snapshot.data}');
      case ConnectionState.done:
        return Text('\$${snapshot.data} (closed)');
    }
    return null; // unreachable
  },
);

StreamBuilder 文档

初始快照数据可以通过指定initialData来控制。这应该用于确保第一帧具有预期值,因为构建器将始终在流侦听器有机会被处理之前被调用。

初始数据

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter StreamBuilder 在初始化时调用两次 的相关文章

  • 期待活页夹但得到空

    尽管一切正常 但我在日志中收到此消息 W Parcel Expecting binder but got null 有人遇到过这样的问题吗 如何解决 重现步骤 只需创建一个新的 Flutter 项目并在模拟器 仿真器上运行它 查看日志 您将
  • FirebaseAnimatedList 实时更改内容

    我想知道如何使用新查询 更改路径的新内容来重建 FirebaseAnimatedList new Flexible child new FirebaseAnimatedList query query sort DataSnapshot a
  • Flutter包读取自己的资产

    我有一个带有 assets 文件夹的模块 该文件夹与我的 pubspec yaml 文件位于同一目录中 在我的资产文件夹中 有 test txt 和 simpleObject json flutter assets assets test
  • ListView 内的颤动行

    我正在尝试添加一个Row在列表视图内并收到错误 I flutter 13858 EXCEPTION CAUGHT BY RENDERING LIBRARY I flutter 13858 The following assertion wa
  • Flutter 屏幕变化回调

    我想在屏幕更改时收到回调 这样我就可以停止在该特定屏幕上运行的重复请求 dispose 仅在使用 Navigator pop 时调用 而在调用 Navigator push 时不调用 有没有办法检测到屏幕已更改且当前未显示 在您的 Mate
  • Flutter“运行 pod install 时出错”“Pods-Runner”目标具有传递依赖项

    当尝试运行我的 flutter 项目时 我得到 运行 pod install 时出错 我看到另一个非常相似的post https github com flutter flutter issues 11856但我不确定我是否也遇到同样的问题
  • Flutter VideoPlayer 无法播放 YouTube 视频

    我正在开发 flutter 应用程序并使用 ext video player 播放 YouTube 视频 当我在视频播放器上播放频道视频时 它不起作用 但我添加了 YouTube 上的任何视频 播放器正在工作 为什么会发生这样的事 impo
  • 避免在 Flutter Web 插件包之外使用纯 Web 库

    我正在构建一个 Flutter 应用程序 并尝试在网络上运行 其中一部分包含一些特定于网络的代码 import dart html as html import package flutter foundation dart class D
  • 飞镖相当于长? [复制]

    这个问题在这里已经有答案了 java的相当于什么longDart 中的数据类型 应该int or long使用 In Java https docs oracle com javase tutorial java nutsandbolts
  • 无需导航到设置页面即可打开定位服务?颤动飞镖

    我们正在从 Flutter 迁移到 Flutter 我们用这个线程来 在 Flutter 中如何实现这一点 当前导航到设置的临时代码 Future getCurrentLocation async Position position try
  • flutter 聊天应用程序上的消息顺序不正确

    我刚刚根据教程完成了一个基本的聊天应用程序 新消息应该显示在底部 但这种情况没有发生 当我删除 保存并再次添加时reversed排队 final messages snapshot data documents reversed 然后它似乎
  • “@required”注释作为错误而不是警告

    现在在我的 Flutter 项目中 当我用注释构造函数参数时 required当实例化构造函数时忘记它 我从 IDE 收到一条轻微警告 表明该参数是必需的 我希望这在 IDE 中显示为实际错误 有办法进去吗analysis options
  • Flutter:“UIAlertView”已弃用:首先在 iOS 9.0 中弃用

    我收到以下错误 Users flo pub cache hosted pub dartlang org image picker 0 6 7 12 ios Classes FLTImagePickerPlugin m 1 49 20 war
  • 在flutter中从cloud_firestore删除文档

    我正在返回一个streamBuilder在streamBuider内部 它返回一个小部件 现在我已经用可忽略的方式包装了一个小部件 以便我可以从 cloud firestore 的集合中删除该文档 showingTheSelectedDat
  • SingleChildScrollView 内垂直居中的小部件

    我是 Flutter 新手 所以我通过制作一个简单的表单来训练自己 我意识到当我在 iPhone 上调试时 虚拟键盘触发了一个错误 A RenderFlex overflowed by 29 pixels on the bottom 我通过
  • 如何在 Flutter 中解码 Gzip Http 响应?

    我是颤振新手 我正在发出网络请求 并且得到了正确的响应 但数据已被压缩 我已经在 Swift 中解压了相同的内容 但是对于 Flutter 我无法做到这一点 有人可以帮忙吗 这是我尝试过的 import dart convert impor
  • 在 flutter 中创建图像蒙版

    Flutter 提供了多种基于路径 即剪辑路径 的遮罩方法 我正在尝试找出一种方法 可以拍摄具有透明层的图像 如下例所示 并使用该图像来掩盖另一个图像 视图或作为通用蒙版 我的第一直觉是看自定义Paint类 https api flutte
  • Android minSdkVersion 与 Flutter(v2.8.1)

    我已经安装了 firebase 包 据我们所知minSdkVersion 19被推荐 所以 我想做这个过程 但是 我看到这一行包含在android app build gradle file minSdkVersion flutter mi
  • 无法使用 flutter 访问移动应用程序中 iframe 内的 Webview 元素

    我正在尝试使用 flutter 访问移动应用程序中的登录表单 网络视图 来编写我的自动化测试用例 原生元素是可以访问的 但是当我尝试访问框架内的 web 视图上的元素时 它不允许我访问该元素 如果有人遇到类似问题 请提供帮助 我尝试使用以下
  • 无法更改 OutlinedButton 中的边框颜色

    我正在尝试改变我的边界OutlinedButton in my main dart但它似乎不起作用 我环顾四周 似乎我需要添加BorderSide 这就是我的outlinedButtonTheme好像 outlinedButtonTheme

随机推荐

  • Groovy 2.0 静态编译的性能如何

    我发现最近发布的 Groovy 2 0 包括可选的静态编译以及其他一些附加好处 例如可选的静态类型检查 经过一番搜索后 我无法找到任何将 Groovy 的性能 使用静态编译 与 Java 甚至 Scala 进行比较的广泛基准测试 有谁知道这
  • 为什么我不能在 std::transform 中使用 std::get<0> ?

    在尝试编译以下代码时 它将复制maps 的键vector map
  • Angular 指令中带有 require 的 bindToController

    如果我的指令使用 require 要使用不同的指令 例如ngModel 并使用隔离范围我如何能够使用bindToController语法并且仍然能够访问可注入项 ngModelController 从控制器 如果没有的话你会怎么做bindT
  • Git 缺少提交错误

    我们最近更改了存储库的位置 并且发现文件中缺少几个月前的提交 我们拥有 Git 的旧服务器已关闭 因此无法从那里恢复提交 这是我得到的错误 git fsck full broken link from commit 58ba71d080b1
  • Rails 4 枚举验证

    这是我第一次在 Rails 4 中使用枚举 我遇到了一些问题 想到了一些肮脏的解决方案 并想检查是否有更优雅的解决方案 这是我的表迁移相关部分 create table shippings do t t column status inte
  • leaflet-draw 删除按钮删除“全部清除”操作

    如何从删除按钮中删除 全部清除 操作传单抽奖编辑工具栏 我知道你可以删除整个delete按钮 但仍需要删除个别项目 基本上寻找一种方法来防止用户删除地图中的每个项目 编辑工具栏测试是否存在removeAllLayers按钮处理程序上的成员
  • Python PIL 成像库 FileNotFoundError

    我目前正在开发一个 tkinter GUI 项目 该项目接收用户的平均值并将其返回给他们 我希望使用 PIL 库在我的父窗口中显示图像 昨天这个库工作正常并在目录中找到我的图像 但今天似乎无法找到该目录 有人可以帮助我并指导我 我不知道为什
  • 每个框中带有标签的马赛克图,显示所有观察值的名称和百分比

    我想创建一个马赛克图 R 包 vcd 请参见例如http cran r project org web packages vcd vignettes residual shadings pdf 在绘图内带有标签 标签应显示各种因素的组合或一
  • Docker/LXC 容器是正在运行的应用程序还是内存中的东西?

    我刚刚读了优秀的SO问题 Docker 和虚拟机有什么区别 然而 被接受的答案让我想要更多一点 I sort of了解容器 Docker LXC 我不明白其中的区别 来使用称为libcontainer和 AuFS 使数十个 数百个甚至数千个
  • 如何在 Thymeleaf 中分割字符串

    我有像这样的图像名称wange 25011 jpg wange 25011 1 jpg或 null 我想将它们拆分为wange 25011 jpg and wange 25011 1 jpg 或者如果为空则不拆分 我尝试了如下代码 但没有工
  • Retrofit 2 和 RxJava 错误处理运算符

    我在我的项目中使用 Retrofit 2 以及 Observable 接口和 Result 包装器 例子 POST api login Observable
  • 以编程方式设置 ConstraintLayout 宽度以匹配父宽度

    在 Android 应用程序中 我尝试以编程方式添加自定义ConstraintLayout垂直方向的视图LinearLayout 我设置了LayoutParams to MATCH PARENT对于宽度和WRAP CONTENT对于高度在C
  • 如何让 ELMAH 与 ASP.NET MVC [HandleError] 属性一起使用?

    我正在尝试使用 ELMAH 记录 ASP NET MVC 应用程序中的错误 但是当我在控制器上使用 HandleError 属性时 ELMAH 在发生错误时不会记录任何错误 正如我猜测的那样 因为 ELMAH 只记录未处理的错误 并且 Ha
  • jQuery 与原生原型冲突

    我在使用 jQuery 和本机 JavaScript 时遇到问题 NOT原型 js 当使用以下代码时 jQuery 1 9 1 出现错误消息 Object prototype myVeryGreatFunction function Err
  • 为什么 GitHub 可能会报告公钥无效? [关闭]

    Closed 这个问题是无关 目前不接受答案 我已经生成了 ssh 密钥 结果是 Your identification has been saved in home rajani ssh id rsa Your public key ha
  • 从 Chrome 开发工具中的网络选项卡预览复制变量

    我正在使用 Chrome 开发工具 并通过网络窗格进行挖掘 以通过预览选项卡查看 XHR 响应 我想从预览中抓取一个特定的对象 但当我尝试存储为全局变量通过右键单击预览对象 创建的临时变量为空 我觉得这很奇怪 因为数据在内存中 否则根本不会
  • Python:如何使用 DictReader 两次?

    这感觉像是一个非常基本的问题 但我在其他地方找不到任何提及 我是一个 Python 初学者 当我使用 DictReader 读取数据 然后使用字典时 我无法再次引用它 例如 使用以下代码 usr bin python import csv
  • 箱线图屏蔽数组

    如何仅对 MaskedArray 的非屏蔽值进行箱线图 我以为这会自动发生boxplot ma 但这似乎是对非屏蔽数组进行箱线图 我想你是对的 plt boxplot如果发送掩码数组 则忽略掩码 所以看起来你必须付出boxplot通过仅发送
  • 如何连接 React 键的字符串?

    我正在创建一个列表列表 并希望为每个元素添加一个唯一的键 当我使用 React Dev Tool 时 新键是 2016 10 football 为什么里面有逗号 当我想要 2016 10 football 时指定键的正确方法是什么 Reac
  • Flutter StreamBuilder 在初始化时调用两次

    StreamBuilder 总是被调用两次吗 一次用于初始数据 然后一次用于输入流 初始化下面的StreamBuilder可以看出build方法被调用了两次 第二次调用比第一次调用晚了 0 4 秒 流 内部版本 1566239814897