首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新状态不调用Flutter BlocBuilder

是指在使用Flutter框架中的BLoC(Business Logic Component)模式时,当新的状态更新时,不会触发BlocBuilder的重建。

BLoC模式是一种用于管理应用程序状态和业务逻辑的设计模式。它将应用程序分为三个主要部分:视图(View)、业务逻辑组件(BLoC)和状态(State)。BlocBuilder是BLoC模式中的一个重要组件,用于根据新的状态来构建UI。

在正常情况下,当BLoC的状态发生变化时,BlocBuilder会自动重建,并根据新的状态来更新UI。但是,有时候我们可能希望在某些特定情况下,新的状态不会触发BlocBuilder的重建,这时可以采取以下方法:

  1. 使用BlocBuilder的条件重建功能:BlocBuilder提供了一个可选的条件重建功能,可以通过设置条件来控制是否重建。可以在BlocBuilder的builder函数中添加一个条件判断,只有当条件满足时才重建UI。例如:
代码语言:txt
复制
BlocBuilder<BlocA, BlocAState>(
  builder: (context, state) {
    if (state is NewState) {
      // 根据新状态构建UI
    }
    return Container();
  },
)
  1. 使用BlocListener代替BlocBuilder:BlocListener是另一个BLoC模式中的组件,它类似于BlocBuilder,但不会重建UI。可以使用BlocListener来监听状态的变化,而不需要重建UI。例如:
代码语言:txt
复制
BlocListener<BlocA, BlocAState>(
  listener: (context, state) {
    if (state is NewState) {
      // 处理新状态的逻辑
    }
  },
  child: Container(),
)

以上是针对新状态不调用Flutter BlocBuilder的解决方法。在实际开发中,根据具体需求选择合适的方法来处理状态更新,以达到更好的性能和用户体验。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云Flutter开发平台:https://cloud.tencent.com/product/flutter
  • 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云对象存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-meta-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

flutter_bloc使用解析---骚年,你还在手搭bloc吗!

这种彻底兼容的做法,确实非常的激进,但是为了优化的点,亦有可圈可点之处 写法 插件已经支持了bloc8.0+的写法 [image-20211210162539060] 来看下版本生成代码 view...BlocBuilder处理构建小部件以响应状态BlocBuilder与非常相似,StreamBuilder但具有更简单的API,可以减少所需的样板代码量。...buildWhen获取先前的块状态和当前的块状态并返回一个布尔值。如果buildWhen返回true,builder将使用进行调用,state并且小部件将重新生成。...它应用于需要在每次状态更改时发生一次的功能,例如导航,显示a SnackBar,显示aDialog等。 listener`与in和函数不同,每次状态更改(****包括初始状态)仅被调用一次。...listenWhen获取先前的bloc状态和当前的bloc状态并返回一个布尔值。如果listenWhen返回true,listener将使用调用state。

5.3K41
  • Flutter状态管理的实践

    Tech 导读 本文介绍flutter状态刷新的一种的思路和尝试,通过dart的扩展属性,定义一个观察者模式,去更新widget的状态,以及如何在widget的生命周期寻找一个切入点,建立订阅关系。...单说移动端,跨平台方案有:RN、Flutter。iOS原生有:SwiftUI。android原生有:compose。华为的鸿蒙系统前段时间也发布了基于type-js的ArkUI的beta版。...状态管理方式实践 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值...final emptyValue = RxObj.obj(); 此时如果我们使用RxObj的setValue方法,就会刷新依赖它的所有TosObWidget控件,如果有些情况下,没有调用...setValue方法,比如RxObj的value是一个list,但是需要刷新状态,可手动调用refresh()方法,实现如下: final listValue = ["aaa", "bbb"].tos;

    1.1K20

    Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探

    中可用于异步通信的方案有如下: Provider ( Provider 异步通信、Provider状态管理) ValueNotifier 点击查看详情 Stream: StreamController...BloC是一种架构模式也是一种编程思想,在Flutter中使用BloC时,首先要引入bloc库 dependencies: flutter_bloc: ^6.0.6 然后将依赖库拉取到本地 flutter...packages get 在Flutter BloC模式开发中常用组件有BlocBuilder、BlocProvider、BlocListener和BlocConsumer等等。.../cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart...buildWhen参数,用于向BlocBuilder提供可选的条件,返回 true,那么将调用state执行视图的重新构建,如果返回false,则不会执行视图的重建操作。

    3.3K11

    Flutter 专题】46 图解状态管理 Provider (一)

    2019 Google I/O 大会上重磅消息出了支持 flutter_web 之外,另一个便是弃用之前的状态管理 Provide,转而推荐相似的库 Provider;虽然只有一个字母之差使用方式差别却很大...;和尚初步学习一下状态管理库 Provider; Flutter 针对不同类型对象提供了多种不同的 Provider;Provider 也是借助了 InheritWidget,将共享状态放到顶层...Provider 方式 最基本的状态管理方式,以一个参数方式绑定和展示; 1....绑定数据类型 Provider 绑定数据类型比较灵活,并非只是基本数据类型,和尚定义了一个 User 类,可正常状态管理;和尚在获取 User 后重新设置 name 之后获取的 User 为最新的数据...作用域绑定数据;若均没有则报异常; 这也验证了文档中提及的子 Widget 作用域,一层一层往外层查找,直到可以正常获取; ChangeNotifierProvider 方式 通过调用

    2K41

    Flutter 状态管理】第一论: 对状态管理的看法与理解

    flutter_bloc 是实现状态管理的工具之一,它的核心是:通过 Bloc 将 Event 操作转化成 State;同时通过 BlocBuilder 监听状态的变化,进行局部组件构建。...核心的状态处理逻辑会在 CountBloc 中进行,并生成状态,且通过 BlocBuilder 组件 触发局部更新 。这样,状态变化的逻辑和界面构建的逻辑就能够很好地分离。...CountBloc 中进行,并生成状态,且通过 BlocBuilder 组件 触发局部更新 。...注: debounce : 当调用动作 n 毫秒后,才会执行该动作,若在这 n 毫秒内又调用此动作则将重新计算执行时间。...,接下来只需要通过 BlocBuilder 监听状态变化,构建组件即可。

    1.5K20

    【源码篇】Flutter Bloc背后的思想,一篇纠结的文章

    ,将状态变量和逻辑方法混在一起,后期维护会非常头痛。...BlocBuilder对StreamBuilder的用法做了很多精简,来看下内部实现 BlocBuilder 此处需要关注下builder参数; buildWhen是个判断是否需要更新的参数 build..., S state); class BlocBuilder, S> extends BlocBuilderBase { const BlocBuilder...模仿Bloc的刷新机制,来手搓一个状态管理框架!用EasyC来命名吧!...[img] 为了证明我写的分析源码是有作用且有效果的,在末尾,我都根据其状态管理框架的刷新机制,手搓了一个全新的状态管理框架 选择状态管理框架,应该是一件比较慎重的事;事先可以先看看其原理,理解了他的内部运转机制

    2.4K41

    Flutter 状态管理 | 业务逻辑与构建逻辑分离

    目前我的状态管理相关文章有: 《Flutter 状态管理 | 第一论 - 对状态管理的看法与理解》 《Flutter 桌面探索 | 自定义可拖拽导航栏》 《Flutter 状态管理 | 第二论...- 业务逻辑与界面构建分离》 本文秒表的界面基础详见这两篇文章 《Flutter 绘制集录 | 秒表盘的绘制》 《Flutter 绘制集录 | 秒表运动与Ticker》 ---- 1....基于 flutter_bloc 的状态管理 状态类的核心逻辑应该在于界面的 构建逻辑,而业务数据的维护,我们可以提取出来。...这样在保证功能的实现下,就对逻辑进行了分离: Widget buildStopWatch() { return BlocBuilder...这里用的是 flutter_bloc ,你完全也可以使用其他的状态管理来实现类似的分离。工具千变万化,但思想万变不离其宗。谢谢观看 ~

    1.5K40

    一天搞定:Flutter + ChatGPT,打造智能聊天机器人

    直接贴上项目地址:https://github.com/bravekingzhang/flutter_chat_box支持的特:全平台支持macOS ✅Linux✅Windows✅Android✅iOS...controller: _scrollController, thumbVisibility: true, child: BlocBuilder...有了会话的conversationId ,就拿着这个ID向 message 表中插入我们问chatGPT的问题3、带着这个问题,去问chatGPT API 接口查询4、因为我们需要实现打字效果,因此,调用的是流式...API,这和我们平常调用API 接口的方式有点不一样,平常是一次调用一次返回,而流式调用是一次调用多次返回,因此我们可以使用dart 的 stream API 来处理5、但是更好的方式是,使用flutter_bloc...在Flutter应用中,我们可以使用HTTP请求向ChatGPT发送请求,所有的逻辑全部都在flutter_bloc 封装的 逻辑中完成,当然这里用到了 flutter pub 上别人提供的 dart

    5.7K71

    Flutter 专题】87 初识状态管理 Bloc (二)

    和尚前两天刚学习了基本的 Bloc 状态管理,其中 UI 通过 setState() 方式更新数据,今天进一步了解进阶版的 FlutterBloc 状态管理; FlutterBloc FlutterBloc...BlocBuilder 和尚理解为 Bloc 构造器,主要用于构建 Widget 以响应状态,相较于 StreamBuilder 更便捷;可替代和尚上一节使用的 setState(); const...时才使用;而 condition 为可选的过度细粒度,包括两个参数,之前的状态和当前的状态,返回值为 Boolean 类型,true 为更新状态重建 Widget,false 时不重新构建; @override...BlocListener BlocListener 与 BlocBuilder 应用有相似之处;其中 listener 用于监听状态变更,可在此做出相应的业务处理; class BlocListener...;此时的过滤与 BlocBuilder 中的 condition 过滤无关; listener 在每次状态变更时调用,其中包括上下文环境和当前状态两个参数; @override Widget build

    97031

    Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

    tileMode: TileMode.repeated, ), ); } 复制代码 ---- 这里的图片组件是通过 ioPinball 对象调用...---- 最后,是加载页最核心的业务逻辑,该项目是通过 flutter_bloc 来进行状态管理的。...这里使用 AssetsManagerCubit 来维护加载资源的逻辑,其中状态数据是 AssetsManagerState ,该状态量可以获取加载的进度。...这里通过 BlocBuilder 来监听状态的变化来构建组件。 从代码中可以看出,这个像素风格的进度条,通过 PinballLoadingIndicator 组件进行显示。...---- 这样状态数据中的进度值 progress 就会变化,整个加载的小体系就得以运转,从业务逻辑到视图更新展示,可以体会一下,bloc 在其中的角色,品味一下状态管理的价值。

    78810

    Flutter&Flame 游戏 - 贰陆】pinball 源码分析 - 游戏主页

    isGameOver 的状态下,才会显示分数面板。 ---- 另外可以 注意到,这里使用了两个 Bloc 中的数据: StartGameBloc 和 GameBloc 来获取当前游戏状态。...其中 StartGameState 中只维护了 StartGameStatus 状态数据。...如下 StartGameStatus 表示游戏开始前的状态,包括四种:initial 表示初始状态;selectCharacter 表示进入选择角色面板的状态;howToPlay 表示弹出 如何玩 面板时的状态...目前 _PositionedGameHud 中使用的是 GameStatus 状态:默认状态是 waiting 状态;游戏开始是 playing 状态;游戏结束是 gameOver 状态: enum GameStatus...另外通过 BlocBuilder 中的构建逻辑可以看出,只有当游戏状态是 isGameOver ,才会显示。

    78620

    Flutter&Flame 游戏 - 贰伍】pinball 源码分析 - 资源加载与 Loading

    tileMode: TileMode.repeated, ), ); } 复制代码 ---- 这里的图片组件是通过 ioPinball 对象调用...---- 最后,是加载页最核心的业务逻辑,该项目是通过 flutter_bloc 来进行状态管理的。...这里使用 AssetsManagerCubit 来维护加载资源的逻辑,其中状态数据是 AssetsManagerState ,该状态量可以获取加载的进度。...这里通过 BlocBuilder 来监听状态的变化来构建组件。 从代码中可以看出,这个像素风格的进度条,通过 PinballLoadingIndicator 组件进行显示。...---- 这样状态数据中的进度值 progress 就会变化,整个加载的小体系就得以运转,从业务逻辑到视图更新展示,可以体会一下,bloc 在其中的角色,品味一下状态管理的价值。

    79910

    掌握Flutter底部导航栏:畅游导航之旅

    底部导航栏与状态管理 底部导航栏通常需要与应用程序的状态进行交互,例如根据用户的操作更新当前选中的导航项。Flutter提供了多种状态管理方法,其中包括使用Provider和Bloc进行状态管理。...6.1 使用Provider进行状态管理 Provider是Flutter生态中最常用的状态管理库之一,它提供了一种简单而强大的方式来管理应用程序的状态,并在不同组件之间进行状态共享。...6.2 使用Bloc进行状态管理 Bloc是另一个常用的Flutter状态管理库,它基于流(Stream)和事件(Event)的模式来管理应用程序的状态,并提供了一种清晰、可维护的方式来组织和处理复杂的业务逻辑...然后,我们使用BlocProvider将NavigationBloc提供给底部导航栏和相关页面组件,并使用BlocBuilder在这些组件中监听和更新状态。...7.1 添加徽章 徽章是一种常用的提示标记,用于向用户展示一些重要信息,例如未读消息数量、通知等。在底部导航栏中添加徽章可以让用户更快速地了解到某个导航项的状态,从而提升用户体验。

    35710

    Flutter 1.22 正式发布

    除了对的移动操作系统版本的支持外,还有很多其他要分享的新闻,包括预览Android最重要的功能之一:状态恢复,的“Material 风格按钮“,的国际化和本地化支持(与热重载一起使用),一个的Navigator...iOS 14 每当发布新版本的移动操作系统时,我们都会对其进行彻底测试,以查找影响Flutter及其工具的兼容性或更改。...当用户选择一种颜色时,我们通常会调用setState()来向Flutter表示您希望再次调用build()方法,该方法现在会创建一个堆栈,其顶部是ColorScreen。...为了自动测试状态恢复,我们向WidgetTester添加了的restartAndRestore API。...滚动时,这种匹配会导致性能下降。

    7.5K20
    领券