首页
学习
活动
专区
工具
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状态就会抛异常...调用Element的markNeedsBuild方法 上面的1-5步流程都非常的简单,在第6步调用markNeedsBuild方法。

1.4K10

Flutter的setState更新原理和流程

也就是只有当我们的类是有状态类的时候才能进行状态刷新,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

80920
  • 【源码篇】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.5K61

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

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

    2K20

    Widget的生命周期和渲染原理

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

    97831

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

    如果当前State不是在mounted == true的状态,你去调用setState()是会crash的。 函数initState()用来初始化State。...这个函数只是简单执行传入的回调然后调用_element.markNeedsBuild()。你看,如果此时_element为空的时候会不会出问题?...所以建议大家在调用setState()之前用mounted判断一下。另外要注意的一点是,这个函数也是触发渲染流水线的一个点。...这些回调函数其实都是在StatefulElement里被调用的。...其内部实现主要是在维护对其有依赖的子Element的Map,以及在需要的时候调用子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.6K41

    enableEventValidation

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

    56620

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

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

    1.4K10

    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,所以出现了兼容性的问题。

    2.1K20

    Flutter进阶-Key之GlobalKey

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

    1.9K20

    假期结束了,DBA们又要忙起来了

    同时,可能需要检查数据库的可用性,确认所有实例是否正常运行,监听器是否正常,避免假期期间有未处理的故障。 接下来,日志审查是关键。...确认备份任务是否在假期期间成功执行,检查RMAN的日志,是否有备份失败的情况。同时,可能需要执行恢复测试,确保备份的有效性,特别是如果假期期间有重要的数据变更,确保可以恢复。...如果数据库在假期期间有变更,比如补丁应用、升级等,需要确认这些变更是否成功,是否有回滚计划,以及后续的验证工作。...AWR/ASH报告: 生成假期期间的报告,分析高负载SQL、锁争用(vlock)、等待事件(vsession_wait)。 -- 生成AWR报告 @?...2、优化方案 根据AWR报告制定SQL调优计划(索引优化、SQL重写)。 3、备份策略调整 根据业务需求调整RMAN保留策略或压缩选项。

    7500

    Flutter | 异常处理

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

    83510
    领券