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

未处理的异常:在生成期间调用了setState()或markNeedsBuild()。BlocListener内幕

未处理的异常:在生成期间调用了setState()或markNeedsBuild()。BlocListener内幕

这个异常通常出现在使用Flutter框架中的Bloc库时。Bloc是一种用于管理应用程序状态的设计模式,它将应用程序状态与用户界面分离开来。BlocListener是Bloc库中的一个小部件,用于监听Bloc状态的变化并执行相应的操作。

在生成期间调用setState()或markNeedsBuild()的异常意味着在BlocListener的build方法中调用了这两个方法之一。这是不允许的,因为BlocListener的目的是监听状态变化并执行操作,而不是直接修改界面。

解决这个异常的方法是将setState()或markNeedsBuild()的调用移动到BlocListener的回调方法中,例如onData或onError。这样,当状态变化时,BlocListener会自动调用回调方法,并在回调方法中执行相应的操作。

关于BlocListener的更多信息和使用示例,可以参考腾讯云的Flutter文档中的BlocListener部分:BlocListener - 腾讯云

需要注意的是,以上答案仅供参考,具体的解决方法可能因具体情况而异。在实际开发中,建议查阅相关文档、参考示例代码,并根据具体情况进行调试和解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

StatefulWidget与State

热重载时,系统会回该方法 void didUpdateWidget(covariant T oldWidget) {}//重新载入 void reassemble() {}//设置界面数据变更...State 对象依赖关系发生变化典型场景:系统语言 Locale 应用主题改变时,系统会通知 State 执行 didChangeDependencies 回方法 void didChangeDependencies...mounted){ 抛出异常}final dynamic result = fn() as dynamic;if (result is Future){ 抛出异常} _element.markNeedsBuild...setState(() { _counter++;}); setState方法执行流程: 判断函数体是否为空,为空则不继续执行 首先判断state生命周期状态,如果是defunct状态就会抛异常...调用ElementmarkNeedsBuild方法 上面的1-5步流程都非常简单,第6步调用markNeedsBuild方法。

1.4K10

FluttersetState更新原理和流程

也就是只有当我们类是有状态类时候才能进行状态刷新,setState也是State(有状态类)类里 解析 :framework.dart文件State类 调用 setState() 必须是没有调用过...if (mounted) { setState(() {}); } setState方法 void setState(VoidCallback fn) { ......_element.markNeedsBuild(); } setState方法除了一些条件判断就是:_element.markNeedsBuild();那我们看看markNeedsBuild。...UI 绘制逻辑【附加】 UI 绘制逻辑是 Render 树中实现,所以这里还来细看 RendererBinding 逻辑。...等待下一次vsync信号到来, 然后再经过层层调用最终会调用到 Window::BeginFrame() UI 绘制逻辑是 Render 树中实现 更新帧信号来临从而刷新需要重构界面 drawFrame

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

    Bloc框架做了一些让我非常疑惑操作,_startListening方法中中调用了 e.markNeedsNotifyDependents() ,完全没用!...我上面吐槽了很多,并非我对bloc有什么意见 Bloc我也用了较长时间,深度使用过程,对其用法做了一些优化,还为其写了一个代码生成插件,为它也算付出了一些时间和精力 但是:代码是不会说谎,所有好不好都在其中...BlocProvider.of获取到(必须是BlocProvider其子Widget) BlocProvider获取实例XxxBloc能够自动释放;BlocProvider.value命名构造函数实例...变量 BlocBuilderBase抽象了一个build方法, _BlocBuilderBaseState中赋值给了 BlocListener BlocBuilderBase还没法看出刷新逻辑,几个重要参数...负责储存 传入XxxBloc加以储存 提供of方法,可以BlocProvider其子节点位置,获取到储存XxxBloc 提供回收资源(回收Stream流) BlocBase 储存了传入

    2.4K41

    Flutter | 启动,渲染,setState 流程

    前言 用了这么久 Flutter 了,居然都不知道他启动过程,真的是学之有愧啊,今天我们来分析一下 Flutter 启动流程,以及他渲染过程,对其做一个简单剖析。...onDrawFrame => _onDrawFrame; // 点击指针事件回 PointerDataPacketCallback get onPointerDataPacket => _...下面我们以 setState 更新流程为例先对整个更新流程有一个比较深印象。 setState 执行流 void setState(VoidCallback fn) { assert(fn !..._inDirtyList = true; } 复制代码 当调用 setState 后: 1,首先调用 markNeedsBuild 方法,将 element dirty 标记为 true,表示需要重建...到此,setState 中最核心就是触发了一个 请求,在下一次屏幕刷新时候就会回 onBeginFrame,执行完成之后才会调用 onDrawFrame 方法。

    1.2K10

    【源码篇】Flutter Provider另一面(万字图文+插件)

    text值,然后TextField数据框里数据也及时改变了,其实最后还是用到setState。...来看下一个小范例,就知道这个东西能帮我们简化很多代码 平时封装带有CallBack回Widget 这边写了俩个自定义点击回判断操作 如果不做判空操作,外部未实现这个Function,点击事件会报空异常...这地方调用了_CreateInheritedProvider类createState() 方法,安心了 performRebuild:该回会在setState或者build时候会触发;此处做了一个判断...底下也调用了 startListening,说明从外面传进来这个回也调用了,将 上下文实例 和 传进来XxxProvider实例 作为入参传进了这个回中,此处传进来也通过 .call 被调用了...performRebuild回中会赋初值 reassemble回中,_delegateState调用了value( _delegateState.value ) 所以 get value 肯定会在初始化时候被调用

    1.4K61

    Flutter 绘制探索 4 | 深入分析 setState 重建和更新 | 七日打卡

    这个系列便是对 Flutter 绘制探索,通过测试、调试及源码分析来给出一些绘制时被忽略从未知晓东西,而有些要点如果被忽略,就很可能出现问题。...第一篇也说过,对于有 滑动 动画 需求绘制,重建触发频率非常大,此时即使对象是 轻量,也会在短时间内创建大量对象,这样不是很好。...经过断言后,会执行回方法,并执行 _element.markNeedsBuild() 。可以看到 setState 方法主要就是执行这个方法,那 _enement 是什么呢? ?...这里只是调用了一下 ensureVisualUpdate。 ?...---- Provider 中,对刷新进行了一定封装,但还是最终还是离不开 element#markNeedsBuild 。 ?

    1.8K20

    Widget生命周期和渲染原理

    其实,所谓生命周期,就是一系列方法回,我们可以通过实现这些方法来捕获一个widget从加载到卸载全过程中各个节点,以合适时机做合适事情。 那么我们可以利用生命周期方法做哪些事情呢?...我们知道,需要修改数据更新UI时候,只要调用setState然后在其中更改数据,这样UI就可以随之改变了,这是因为setState函数可以触发widget销毁重建,也就是会触发statebuild...接下来我们看一下setState源码: 可以看到,除了断言,这里面实际上就调用了一行代码: _element!....好,现在我们知道了通过setState来根据数据自动调整UI原理了,因此,原则上我们是可以不调用setState而直接给element调用markNeedsBuild函数来实现UI更新,即: StatefulWidget...StatefulElement; StatefulElement构建函数中,调用了widgetcreateState函数来创建State,并且给创建出来State对象element和wiget

    1.3K20

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

    和尚前两天刚学习了基本 Bloc 状态管理,其中 UI 通过 setState() 方式更新数据,今天进一步了解进阶版 FlutterBloc 状态管理; FlutterBloc FlutterBloc...BlocBuilder 和尚理解为 Bloc 构造器,主要用于构建 Widget 以响应新状态,相较于 StreamBuilder 更便捷;可替代和尚上一节使用 setState(); const...BlocListener BlocListener 与 BlocBuilder 应用有相似之处;其中 listener 用于监听状态变更,可在此做出相应业务处理; class BlocListener...A1: FloatingActionButton 中添加 heroTag 区分 以前在学习 Hero Animation 时,同一个 Page 页面不能用两个相同 heroTag,和尚这次忽略了...A2: build() 外创建通过如下方式创建,并建议与 BlocBuilder 成对设置 // build() 方法外创建 NumberBloc _numBloc; @override void

    96131

    Flutter框架分析(三)-- Widget,Element和RenderObject

    如果当前State不是mounted == true状态,你去调用setState()是会crash。 函数initState()用来初始化State。...这个函数只是简单执行传入然后调用_element.markNeedsBuild()。你看,如果此时_element为空时候会不会出问题?...所以建议大家调用setState()之前用mounted判断一下。另外要注意一点是,这个函数也是触发渲染流水线一个点。...这些回函数其实都是StatefulElement里被调用。...其内部实现主要是维护对其有依赖子ElementMap,以及需要时候调用子Element对应didChangeDependencies()回,这里就不贴代码了,大家感兴趣的话可以自己去看一下源码

    1.3K10

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

    插件 因为官方插件生成写法,和调整后写法差距有点大,而且官方插件不支持生成view层和相关设置,此处我就撸了一个插件,完善了相关功能 请注意,wrap代码和提示代码片段,参靠了官方插件规则 Wrap...Widget 规则来着:intellij_generator_plugin 快捷代码生成规则来着: intellij_generator_plugin Android Studio里面搜索 flutter...这里使用了克隆方法,可以发现,我们只要关注自己需要改变变量就行了,其它变量都在内部赋值好了,我们不需要去关注;这就大大便捷了页面中有很多变量,只需要变动一俩个变量场景 注意:如果变量数据未改变...;观察者(回刷新控件)和被观察者(产生相应事件,添加事件,去通知观察者),bloc层是处于观察者和被观察者中间一层,我们可以bloc里面搞业务,搞逻辑,搞网络请求,不能搞基;拿到Event事件传递过来数据...,因为主入口使用了BlocProvider创建了SpanOneCubit,所以在这个页面不需要再次创建,直接使用BlocBuilder便可以获取其state 可以发现,这个页面使用了StatefulWidget

    5.3K41

    Flutter学习之构建、布局及绘制三部曲

    (Window.onDrawFrame)、Post-frame callbacks(Frame结束时只会被调用一次,调用后会被系统移除,Persistent callbacks后Window.onDrawFrame..._newWidget = this; element.markNeedsBuild(); } return element; } element为空,owner先锁定状态,然后调用了RenderObjectToWidgetAdapter...通过setState触发构建 通常我们应用中要更新状态都是通过State中setState方法来触发界面重绘,setState方法就是先调用了callback让后调用该StateElement对象...markNeedsBuild方法,markNeedsBuild中将Element标记为dirty并通过BuildOwner将其添加到dirty列表中并调用onBuildScheduled回WidgetsBinding...初始化时设置,它回去调用window.scheduleFrame方法),让后windowonBeginFrame,onDrawFrame回SchedulerBinding初始化时设置,这两个回会执行一些

    98610

    enableEventValidation

    大家好,又见面了,我是你们朋友全栈君。 回发参数无效。...出于安全目的,此功能验证回发事件参数是否来源于最初呈现这些事件服务器控件。...说明: 执行当前 Web 请求期间,出现未处理异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误出处详细信息。 错误: 回发参数无效。...出于安全目的,此功能验证回发事件参数是否来源于最初呈现这些事件服务器控件。...关于出现异常,可以认为输出时候没有包含btnSubmit,可是再提交到后台时候却有相应内容,前后不一致,所以 开启事件校验情况下.NET抛出了异常

    55320

    System.ArgumentException: 回发参数无效。配置中使用

    关于同一个页面中使用Gridview控件时候发现气updaeting事件无法被服务器所响应,看来它错误报警然后查询了部分资料现在将整理解决方法总结如下:点击update 事件无法响应原因出在回发参数无效...出于安全目的,此功能验证回发事件参数是否来源于最初呈现这些事件服务器控件。...说明: 执行当前 Web 请求期间,出现未处理异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误出处详细信息。...异常详细信息: System.ArgumentException: 回发参数无效。...关于出现异常,可以认为输出时候没有包含btnSubmit,可是再提交到后台时候却有相应内容,前后不一致,所以 开启事件校验情况下.NET抛出了异常

    1.3K10

    web未能加载文件程序集“XXX”某一个依赖项

    如果你将应用程序生成x86而不是Any CPU时,64位操作系统中不会出错错误,而在32位操作系统中可能会出现以下错误 “/xxxxx”应用程序中服务器错误。...试图加载格式不正确程序。 ? 说明: 执行当前 Web 请求期间,出现未处理异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误出处详细信息。...异常详细信息: System.BadImageFormatException: 未能加载文件程序集“xxx”某一个依赖项。试图加载格式不正确程序。...源错误: 执行当前 Web 请求期间生成未处理异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置信息。...第一次:Windows 2008 Server R2 64位; 第二次:Windows 7 64位; 原因分析:操作系统是64位,但发布程序引用了一些32位ddl,所以出现了兼容性问题。

    1.5K20

    web未能加载文件程序集“XXX”某一个依赖项

    如果你将应用程序生成x86而不是Any CPU时,64位操作系统中不会出错错误,而在32位操作系统中可能会出现以下错误 “/xxxxx”应用程序中服务器错误。...试图加载格式不正确程序。 说明: 执行当前 Web 请求期间,出现未处理异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误出处详细信息。...异常详细信息: System.BadImageFormatException: 未能加载文件程序集“xxx”某一个依赖项。试图加载格式不正确程序。...源错误: 执行当前 Web 请求期间生成未处理异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置信息。...第一次:Windows 2008 Server R2 64位; 第二次:Windows 7 64位; 原因分析:操作系统是64位,但发布程序引用了一些32位ddl,所以出现了兼容性问题。

    2K20

    Flutter | 异常处理

    本文示例代码 了解 Flutter 异常捕获之前需要先了解一下 Dart 异常处理以及 Dart 单线程模型,只有知道了代码执行流程,我们才能只要该在什么地方去捕获异常 Dart 中异常...,但是事件任务执行过程中也可以插入新微任务和事件任务,这种情况下整个县城执行过程便是一直循环,不会退出,而在 Flutter 中,主线程执行过程正是如此,永不终止 ​ Dart 中,所有的外部事件任务都在事件队列中...沙箱可以捕获,拦截修改一些代码行为,如 Zone 中可以捕获日志输出,Timer 创建,微任务调用行为,同时 Zone 也可以捕获所有未处理异常,下面看一下 runZoned() 方法定义:...,通过这种方式,我们也可以应用中记录日志,等到应用触发未捕获异常时,将以此和日志进行上报 onError Zone 中未捕获以此处理回。...error-zone 中发生未捕获异常(无论是同步还是异步)时都会调用开发者提供,如: runZoned(() { print('hello world'); throw NullThrownError

    80710

    Flutter进阶-Key之GlobalKey

    owner可能有些同学会比较陌生,owner实际是BuildOwner实例,WidgetBinding中持有生成,管理dirty和inactiveelement。...实现原理: 开始探索原理之前,我们需要明白setState流程,我们简单过一下,setState之后,会将当前widget(MyHomePage)markNeedsBuildmarkNeedsBuild...递归child更新,RenderObjectElement则是更新RenderObject,如果是带childchildrenRenderObjectElement最终也会调用到updateChild...本文例子中,我们更改了层级,updateChild方法中会进入deactivateChild(child);,然后重新inflateWidget生成element树。...答案是会,但是build方法调用不代表我们widget被重新绘制,Flutter中build方法是生成widget配置信息,是很轻量也是会被频繁调用。

    1.8K20
    领券