Flutter开发进阶之错误信息

Flutter开发进阶之错误信息

在Flutter开发中错误信息通常是由Exception和Error表示,Error表示严重且不可恢复的错误,一般会导致程序直接终止,而Exception可以被显式抛出,一般为代码逻辑错误,根据Flutter的解释说Exception为异常而Error为错误。
本文将通过源码和实际操作来比较Exception和Error的异同。
Flutter开发进阶

介绍比对

('flutter:keep-to-string-in-subtypes')
abstract interface class Exception

('flutter:keep-to-string-in-subtypes')
class Error

@pragma('flutter:keep-to-string-in-subtypes') 是一个特殊的注解(annotation),它用于指导Flutter的Dart编译器在编译时保留某些类型信息。
具体来说,这个注解是为了确保当类型被用作其他类型的子类型时,其字符串表示形式(通常是类型名称)会被保留在生成的代码中。
Exception是一个抽象类,一般需要通过指定的类型去使用,例如

class FormatException implements Exception

处理的是字符串类型的异常。
Exception还有

("Use UnsupportedError instead")
class IntegerDivisionByZeroException implements Exception, UnsupportedError

现已废弃,开始采用UnsupportedError

对于Error,源码中的注释相对于Exception要严重的多,程序员应该避免其出现在测试以外。
其类型有

class AssertionError extends Error

class TypeError extends Error

class ArgumentError extends Error

class RangeError extends ArgumentError

class IndexError extends ArgumentError implements RangeError

class NoSuchMethodError extends Error

("vm:entry-point")
class UnsupportedError extends Error

class UnimplementedError extends Error implements UnsupportedError

class ConcurrentModificationError extends Error

final class OutOfMemoryError implements Error

final class StackOverflowError implements Error

名称很直白,很容易就知道具体是什么错误。

使用比对

    try {
      ///
    } on FormatException {
      ///
    } catch(e, s) {
      ///
    } finally {
      ///
    }

通过try可以执行一些可能抛出异常的方法,可以通过on可以对指定类型的异常进行对应处理,catch会收到对应的错误,无论代码是否异常最后都会执行finally
FormatException还可以自定义类型,比如我们在进行数据请求时就是通过自定义异常类型去处理异常。
可以通过throw const FormatException('xxxxx');主动抛出异常,还可以通过rethrow;进行异常重抛。
异常的收集需要在WidgetsFlutterBinding.ensureInitialized()执行之后。
主动抛出的错误也是可以通过throw来执行,对于Flutter的错误可以通过

    FlutterError.onError = (e) {
      FlutterError.presentError(e);
    };

来收集。
对于异步的错误可以通过

  PlatformDispatcher.instance.onError = (error, stack) {
    myBackend.sendError(error, stack);
    return true;
  };

来收集,或者通过

R? runZonedGuarded<R>(R body(), void onError(Object error, StackTrace stack),
    {Map<Object?, Object?>? zoneValues, ZoneSpecification? zoneSpecification})

来处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能&#xff0c;掌握了这项技能&#xff0c;可以很好的定义bug所在。一般在开发vue3项目时&#xff0c;有三种方式。 代码中添加debugger;使用浏览器调试&#xff1a;sourcemap需启用vs code 调试&#xff1a;先开启node服…

ARM、X86、RISC-V三分天下

引入&#xff1a; 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构&#xff0c;它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…

【Frida】【Android】 工具篇:ProxyPin抓包详解

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

如何在nuxt中优雅使用swiper,实现过渡反向+贴合无缝+循环播放【核心代码分析】

视频效果 20240402-1723 图片效果 技术栈 Nuxt3 + Swiper11 Nuxt3 Nuxt: The Intuitive Vue Framework Nuxt Swiper11 Swiper - The Most Modern Mobile Touch Slider (swiperjs.com) 当然你也可以是使用nuxt-swiper Nuxt-Swiper GitHub - cpreston321/nuxt-swiper: Swi…

贪心算法|122.买卖股票的最佳时机II

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i) {result max(prices[i] - prices[i - 1], 0);}return result;} }; 贪心思路出来了&#xff0c;代码居然如此简单啊&#xff0…

243.回文链表

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;head …

Rust语言

Rust语言 一&#xff0c;Rust语言是什么 Rust 是一种系统级编程语言&#xff0c;由 Mozilla 开发。它的设计注重安全性、并发性和性能。Rust 最初发布于 2010 年&#xff0c;其目标是成为一种能够替代 C 和 C 的编程语言&#xff0c;同时提供更好的内存安全性和并发支持。 Rust…

篡改猴+idm实现不限速百度网盘下载

1. 去油猴官网下载个chrome拓展 https://www.tampermonkey.net 2. 下载idm插件 如何在Chrome浏览器中插入IDM扩展插件-IDM中文网站 下载完成后打开chrome浏览器的插件&#xff0c;直接拖进去 3. 在 Greasy Fork - 安全、实用的用户脚本大全 中搜索 百度网盘&#xff0c;切换…

瑞吉外卖实战学习--16、登录短信验证

登录短信验证 前言环境准备(根据mybatisPlus 规范实体类和接口)1、User实体类2、mapper文件3、service文件4、impl文件5、随机生成验证码的工具类6、发送验证码的工具类7、获取验证码和移动端登录前言 本项目gitee位置:gitee网址 本项目采用的技术是:springboot + mybatis…

使用 Copilot 重新定义Forms表单创建

您好&#xff0c;Microsoft 365 copilot订阅用户&#xff01;很高兴与大家分享&#xff0c;您现在可以在表单中利用 Copilot 更轻松地构建高质量且设计精良的调查、表单和民意调查。 使用 Copilot 重新定义表单创建 只需向 Copilot 描述您想要构建的表单&#xff0c;您就可以…

【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

golang设计模式图解——命令模式

设计模式 GoF提出的设计模式有23个&#xff0c;包括&#xff1a; &#xff08;1&#xff09;创建型(Creational)模式&#xff1a;如何创建对象&#xff1b; &#xff08;2&#xff09;结构型(Structural )模式&#xff1a;如何实现类或对象的组合&#xff1b; &#xff08;3&a…

【Java网络编程】HTTP超文本传输协议

一、HTTP超文本传输协议 HTTP全称为Hyper Text Transfer Protocol超文本传输协议&#xff0c;它是基于TCP传输协议构建的应用层协议&#xff0c;作为支撑万维网www的核心协议&#xff0c;为了保证其效率及处理大量事务的能力&#xff0c;因此在设计时&#xff0c;HTTP被制定成为…

第四百四十四回

文章目录 1. 问题描述2. 优化方法2.1 缩小范围2.2 替代方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取AppBar的高度"相关的内容&#xff0c;本章回中将介绍关于MediaQuery的优化.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 问题描述 我们在…

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因&#xff0c;您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是&#xff0c;这种情况经常发生在 iDevice 缺乏备份的情况下。 &#xff08;iPhone消息消失还占用空间&#xff1f;&…

C++的list类(一):list类的常见操作和模拟实现

目录 前言 List类的迭代器 List类的模拟实现 list.h文件 test.cpp文件 前言 vector的insert和erase都会导致迭代器失效list的insert不会导致迭代器失效&#xff0c;erase会导致迭代器失效 insert导致失效的原因是开辟了新空间后&#xff0c;迭代器扔指向原空间erase导致失…

吴恩达2022机器学习专项课程(一) 5.4 多元线性回归的梯度下降

问题预览/关键词 多元线性回归的函数是&#xff1f;如何向量化表达&#xff1f;如何计算多元线性回归的成本函数的梯度&#xff1f;正规方程法是什么&#xff1f;正轨方程法的缺点是什么&#xff1f; 笔记 1.多元线性回归函数 5.1章节描述过。 向量化函数 原版函数 2.计…

设计模式——桥接模式07

桥接模式是将抽象部分与实现部分分离&#xff0c;可实现两部分的组合使用。 例如 遥控器 &#xff08;抽象部分&#xff09;与 设备&#xff08;实现部分 电视&#xff0c;空调等&#xff09;。遥控器调用的是 设备方实现的接口。 设计模式&#xff0c;一定要敲代码理解 抽象模…

基于springboot实现学科竞赛管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现学科竞赛管理系统演示 摘要 随着国家教育体制的改革&#xff0c;全国各地举办的竞赛活动数目也是逐年增加&#xff0c;面对如此大的数目的竞赛信息&#xff0c;传统竞赛管理方式已经无法满足需求&#xff0c;为了提高效率&#xff0c;竞赛管理系统应运而生。…

springboot国际化多语言

1,新建国际化多语言文件 在resources目录下新建 messages.properties 其他语言的文件 编辑messages.properties文件,下方从text切换到Resource Bundle ,即可对照着编辑多语言文件 (如果没有找到Resource Bundle,先在settings->plugins中安装Resource Bundle Editor) 2,配…