首页
学习
活动
专区
工具
TVP
发布

Flutter | 异常处理

本文示例代码 在了解 Flutter 异常捕获之前需要先了解一下 Dart 的异常处理以及 Dart 的单线程模型,只有知道了代码的执行流程,我们才能只要该在什么地方去捕获异常 Dart 中的异常...Dart 可以抛出和捕获异常,如果没有被捕获,则会抛出,最终导致程序终止运行 和 Java 不同,Dart 中的所有异常时非检查异常方法不会声明它们抛出的异常,也不要求捕获任何异常 Dart 提供了...我们可以通过 Future.microtask()方法向微任务队列添加一个任务 Flutter 异常捕获 Flutter 框架异常捕获 Flutter 框架为我们在很多地方都进行了异常补货,例如,当布局发生越界或者不规范时...,Flutter 会自动弹出一个错误页面, 这是因为 Flutter 已经在 build 方法时添加了异常捕获,源码如下: @override void performRebuild() { ........继续跟踪 onError 就可以找到这个方法 通过上面的代码我们可以知道,如果要将自己捕获的异常上报的话可以直接调用 reportError()方法,这个方法本身是一个静态方法,如下所示: class

71710
您找到你想要的搜索结果了吗?
是的
没有找到

Flutter 异常捕获详解

Flutter 异常 Flutter 异常指的是,Flutter 程序中 Dart 代码运行时意外发生的错误事件。我们可以通过与 Swift 类似的 try-catch 机制来捕获它。...同步的 try-catch 和异步的 catchError,为我们提供了直接捕获特定异常的能力,而如果我们想集中管理代码中的所有异常Flutter 也提供了 Zone.runZoned 方法。...Framework 异常的捕获方式 Framework 异常,就是 Flutter 框架引发的异常,通常是由应用代码触发了 Flutter 框架底层的异常判断引起的。...比如,当布局不合规范时,Flutter 就会自动弹出一个触目惊心的红色错误界面,如下所示: framework_error.png 这其实是因为,Flutter 框架在调用 build 方法构建页面时进行了...因此,我们通常会重写 ErrorWidget.builder 方法,将这样的错误提示页面替换成一个更加友好的页面。 下面的代码演示了自定义错误页面的具体方法

7.7K20

Flutter异常处理

Flutter 异常 Flutter 异常指的是,Flutter 程序中 Dart 代码运行时意外发生的错误事件。我们可以通过与 Java 类似的 try-catch 机制来捕获它。...Dart 异常,根据来源又可以细分为 App 异常和 Framework 异常Flutter 为这两种异常提供了不同的捕获方式,接下来我们就一起看看吧。...同步的 try-catch 和异步的 catchError,为我们提供了直接捕获特定异常的能力,而如果我们想集中管理代码中的所有异常Flutter 也提供了 Zone.runZoned 方法。...Flutter 框架异常捕获 Flutter 框架为我们在很多关键的方法进行了异常捕获。...这里举一个例子,当我们布局发生越界或不和规范时,Flutter就会自动弹出一个错误界面,这是因为Flutter已经在执行build方法时添加了异常捕获,最终的源码如下: @override void performRebuild

2.5K10

FlutterFlutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)

销毁期的生命周期函数 /// 方法调用时机 : 组件被销毁时调用 , 要在该方法中进行资源的释放与销毁操作 @override void dispose() { super.dispose...销毁期的生命周期函数 /// 方法调用时机 : 组件被销毁时调用 , 要在该方法中进行资源的释放与销毁操作 @override void dispose() { super.dispose...I/flutter (21393): build I/flutter (21393): build 退出界面 : 先调用 deactivate 方法 , 最后调用 dispose 方法 ; I/flutter...(21393): deactivate I/flutter (21393): dispose 完整日志 : Performing hot reload......(21393): dispose 四、相关资源 ---- 参考资料 : Flutter 官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev

2.4K00

Flutter异常监测与上报

所谓Flutter异常,指的是Flutter程序中Dart代码运行时发生的错误。...Flutter对这两种异常提供了不同的捕获方式,Framework异常是由Flutter框架引发的异常,通常是由于错误的应用代码造成Flutter框架底层的异常判断引起的,当出现Framework异常时...如果想集中管理代码中的所有异常,那么可以Flutter提供的Zone.runZoned()方法。在Dart语言中,Zone表示一个代码执行的环境范围,其概念类似沙盒,不同沙盒之间是互相隔离的。...[在这里插入图片描述] 之所以会弹出一个错误提示页面,是由于系统在调用build()方法构建页面时会进行try-catch处理,如果出现任何错误就会调用ErrorWidget页面展示异常信息,并且Flutter...postException 方法异常上报至 Bugly。

2.6K10

Flutter】Future 异步编程 ( 简介 | then 方法 | 异常捕获 | async、await 关键字 | whenComplete 方法 | timeout 方法 )

文章目录 一、Future 简介 二、Future.then 使用 三、Future 异常捕获 四、Dart 练习网站 五、async、await 关键字 六、whenComplete 方法 七、timeout...onError} 是可选的 , 用于捕获异常方法 ; 三、Future 异常捕获 ---- 方式一 : then 方法传入 onError 参数 ; 在执行 返回值是 Future 类型的 testFuture...官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev/packages Flutter 开发文档 : https://flutter.cn.../docs ( 强烈推荐 ) 官方 GitHub 地址 : https://github.com/flutter Flutter 中文社区 : https://flutter.cn/ Flutter 实用教程...: https://flutter.cn/docs/cookbook Flutter CodeLab : https://codelabs.flutter-io.cn/ Dart 中文文档 : https

74910

StatefulWidget与State

dispose 最后我们在第一个界面尝试下热更新 I/flutter (26863): page1 reassembleI/flutter (26863): page1 build 下面是相关生命周期的调用次数...1 state对象被销毁 通常情况下,我们可以在initState方法中做一些初始化工作,然后在dispose方法中做一些销毁工作。...State.dispose方法已经执行,State即将销毁 好了,了解完了State的生命周期,我们接着去看setState方法。...mounted){ 抛出异常}final dynamic result = fn() as dynamic;if (result is Future){ 抛出异常} _element.markNeedsBuild...setState(() { _counter++;}); setState方法的执行流程: 判断函数体是否为空,为空则不继续执行 首先判断state生命周期的状态,如果是defunct状态就会抛异常

1.3K10

Flutter 异常处理之图片篇

背景 说到异常处理,你可能直接会认为不就是 try-catch 的事情,至于写一篇文章单独来说明吗? 如果你是这么想的,那么本篇说不定会给你惊喜哦~ 而且本篇聚焦在图片的异常处理。...这种场景假设我们要捕获异常,增加 try-catch,如下: Widget _buildWidget() { try { return Image.network...虽然 Flutter 自带的错误日志依然输出了,但是通过 errorListener 我们可以获得这种异常情况。...图片通用异常捕获处理 通过上面的学习,我们可以发现不管是 Image.network 还是 cached_network_image 没法覆盖全上面两种异常的捕获处理。...不行,这边测试了,填 null 当图片加载成功时控制台会抛异常。所以提供一个不需要任何实现的回调即可。 错误回调是可选的,因为我们本篇的主题就是要获取错误回调,所以这里提供了实现。

2.1K30

Flutter异常监控 | 框架Catcher原理分析

前言在给Flutter应用做异常监控的时候,一开始我是拒绝滴,如果不考虑Flutter Engine和native侧的监控,用我另一篇文章中不得不知道的Flutter异常捕获知识点 提到的方法基本可以搞定所有...Catcher简介我的理解Catcher有如下特征:针对Flutter异常收集的一个纯Dart库,天然支持各种平台包括对Web侧的支持。...///该方法下就会实现对应的UI,如弹框就会在这里弹出来。 void requestAction(Report report, BuildContext?...支持异常存储到文件和上传到网络,支持传输到其他知名flutter后台,如Sentry等。缺点异常处理和上传过程在main线程中,对处理和上报操作都做了时间间隔限制进行去重和丢弃处理。...没有考虑Flutter engine和Native异常的扩展处理情况,虽然他们不属于Flutter Error的范围。

1.2K50

Flutter 异常处理方案——灰度与降级

Flutter 异常概述 关于 Flutter 异常类型与捕获的文章网上已经有许多了,本文不再详细赘述,此处仅做个小结以保证文章的完整性。...Flutter 异常具体可分为以下几类: Dart 异常 同步异常 异步异常 App 异常 Framework 异常 Engine 异常 所谓 Dart 异常,根据来源又可以细分为 App 异常和 Framework...Flutter 中提供了 Zone.runZoned 方法,在 Dart 中,Zone 表示一个代码执行的环境范围,类似于沙盒,可以使用其提供的 onError 回调函数来拦截所有未被捕获的异常。...3.2 框架异常降级 如果捕获到 Flutter Framework 异常,则将该页面置为「需要降级」,提供自定义的 ErrorWidget 提醒用户页面出错需要重新进入,之后在用户下次进入该页面时触发降级...3.5 Flutter 相关崩溃降级 除此以外,我们也遇到过 Flutter 导致的崩溃,不属于引擎崩溃也不是产物加载问题,也不是 Flutter 异常,仅仅是 Flutter Plugin 的问题,如插件原生侧的实现逻辑问题导致的崩溃

2.4K10

Flutter异常监控 | 框架Catcher原理分析

前言 在给Flutter应用做异常监控的时候,一开始我是拒绝滴,如果不考虑Flutter Engine和native侧的监控,用我另一篇文章中不得不知道的Flutter异常捕获知识点 提到的方法基本可以搞定所有...Catcher简介 我的理解Catcher有如下特征: 针对Flutter异常收集的一个纯Dart库,天然支持各种平台包括对Web侧的支持。...///该方法下就会实现对应的UI,如弹框就会在这里弹出来。 void requestAction(Report report, BuildContext?...支持异常存储到文件和上传到网络,支持传输到其他知名flutter后台,如Sentry等。 缺点 异常处理和上传过程在main线程中,对处理和上报操作都做了时间间隔限制进行去重和丢弃处理。...没有考虑Flutter engine和Native异常的扩展处理情况,虽然他们不属于Flutter Error的范围。

92560

JS魔法堂:定义页面的Dispose方法——unload事件启示录

为网页写个Dispose方法  C#中我们会将释放非托管资源等收尾工作放到Dispose方法中, 然后通过using语句块自动调用该方法。对于网页何尝不是有大量收尾工作需要处理呢?...但相对C#通过using语句块自动调用Dispose方法,beforeunload和unload的触发点则复杂不少。  我们看看什么时候会触发这两个事件呢?...对于我的需求就是在页面的Dispose方法中调用登出API,经过和实施同事的沟通——只要刷新页面就触发登出。.../logout")) 那现在剩下的问题就在于到底是在beforeunload还是unload事件处理函数中调用dispose方法呢?...的JS异常,而firefox下则连异常都懒得报。  既然不给用window.confirm,那么如何弹出二次确定对话框呢?其实beforeunload事件已经为我们准备好了。

2.2K90

Flutter异常监控 - 肆 | Rollbar源码赏析

追溯生成路径 该需求与第三篇Flutter异常监控 - 叁 |从bugsnag源码学习如何追溯异常产生路径 相同 该需求目的是能完整记录用户操作的整个行为路径,这样达到清晰指导用户操作过程,对问题的定位很有帮助...Flutter异常监控点 接入端通过RollerFlutter.run 进入到Rollbar内部逻辑。...通过FlutterError.onError(21行)和runZonedGuarded(13行)两个监控点逻辑处理,将异常收拢到Rollbar.error方法中 将原始异常以Event方式交给Notifier.notify...Wrangler get wrangler; Telemetry get telemetry; FutureOr notify(Event event); FutureOr dispose...参考链接 Flutter异常监控 - 叁 | 从bugsnag源码学习如何追溯异常产生路径 - 掘金 Releases · rollbar/rollbar-flutter Flutter

82940

Flutter异常监控 - 伍 | 关于异常监控框架设计的思考

异常监控 - 壹 | 从 Zone 说起 Flutter 异常监控 - 贰 | 框架 Catcher 原理分析 Flutter 异常监控 - 叁 | 从 bugsnag 源码学习如何追溯异常产生路径...显然,按 Flutter 是大佬的思路,站在多平台统一的上帝视角来看,Flutter 异常范围是包括其他平台异常的,比如其他平台的 OOM 等而非单纯考虑 Dart 侧异常。...那么问题来了,是在安卓端和 ios 端分别建立一套数据存储异常呢,还是将不同平台异常收拢到 Flutter 平台来统一管理和上报?...迁移成本 很多开源库喜欢将 flutter 作为小弟角色,异常都给到对端,这样导致的问题也很明显,安卓和 ios 两个后台异常系统都会出现 flutter 异常数据,默认存储两份上报两次,比如 Bugsnag...一种异常框架设计思路 依赖反转是不错的思路,子平台将异常收集传递给 Flutter 统一管理和上报。

69730

Flutter 如何禁止手机横屏

问题引出 群友发来问题: Flutter 怎么禁止横屏显示呀,网上说的几个方法 都没有效 群友遇到问题,就要群友去帮助,这样,这个群就有了存在的意义。...代码 import 'package:flutter/services.dart'; void main() async => { WidgetsFlutterBinding.ensureInitialized...DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } @override void dispose...(); } 像这样,设置到一个 StatefulWidget 的 initState 和 dispose 里面就可以了。...当然对于生活这段代码来说,不会按照你的想法来执行,充满了太多的未知和异常,稍不留神就是报错,遇到问题就必须处理,DeBug的过程虽然很难很痛苦,但成功解决完之后又是另一番美景。坚果加油

2.5K20
领券