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 Errorclass TypeError extends Errorclass ArgumentError extends Errorclass RangeError extends ArgumentErrorclass IndexError extends ArgumentError implements RangeErrorclass NoSuchMethodError extends Error("vm:entry-point")
class UnsupportedError extends Errorclass UnimplementedError extends Error implements UnsupportedErrorclass ConcurrentModificationError extends Errorfinal class OutOfMemoryError implements Errorfinal 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})

来处理。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang开发2D小游戏全套教程(已完结)

Golang开发2D小游戏全套教程&#xff08;已完结&#xff09; 本套教程将基于ebiten库开发一套2D小游戏。 全套代码&#xff1a;https://github.com/ziyifast/ziyifast-code_instruction/tree/main/game_demo ebiten官网地址&#xff1a;https://github.com/hajimehoshi/ebiten …

单调栈(LeetCode-下一个更大元素)

每日一题 今天刷到了一道用到单调栈来解决的题目&#xff0c;想到自己没有总结过单调栈的知识点&#xff0c;因此想总结一下。 介绍 什么是单调栈&#xff1f; 单调栈的定义其实很简单&#xff0c;所谓单调栈就是指一个单调递增或是单调递减的栈。 那单调栈有什么用呢&#x…

在单交换机局域网中,不同网段的主机通信探秘

在理解局域网中不同网段主机之间的通信之前&#xff0c;我们首先要明白网络的基本组成和工作原理。局域网&#xff08;LAN&#xff09;是一个封闭的网络环境&#xff0c;通常由交换机&#xff08;Switch&#xff09;作为核心设备连接网络中的各个主机。当我们谈论不同网段的主机…

基于Socket简单的TCP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 TCP单例模式的多线程版本的英汉互译服务器 我们先来认识一下与udp服务器实现的不同的接口&#xff1a; TCP服务器端 socket()&…

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

通用爬虫的概念简述

一、&#x1f308;什么是通用爬虫 通用爬虫&#xff08;General Purpose Web Crawler或Scalable Web Crawler&#xff09;是一种网络爬虫&#xff0c;其设计目标是对整个互联网或尽可能广泛的网络空间进行数据抓取。通用爬虫主要用于搜索引擎构建其庞大的网页索引数据库&#…

《债务与国家的崛起》西方民主制度的金融起源 - 三余书屋 3ysw.net

债务与国家的崛起&#xff1a;西方民主制度的金融起源 你好&#xff0c;今天我们来聊聊由英国知名经济与金融历史学家詹姆斯麦克唐纳所著的《债务与国家的崛起》这本书。19世纪世界历史上发生了一次巨变&#xff0c;即“大分流”。当时西方通过工业革命实现了科技和经济的飞速…

【开源语音项目OpenVoice](一)——实操演示

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF分类预测(二分类及多分类皆可)-附代码

Bayesian Optimization&#xff08;贝叶斯优化&#xff09;是一种用于超参数调优的技术&#xff0c;对于类似随机森林&#xff08;Random Forest&#xff0c;简称RF&#xff09;的机器学习算法非常重要。随机森林是一种集成学习方法&#xff0c;它在训练过程中构建多个决策树&a…

How-Google-Tests-Software_Google软件测试之道_英文版pdf

我看How-Google-Tests-Software_Google软件测试之道_英文版pdf挺难找的 在这里分享一下 链接: https://pan.baidu.com/s/1bTafUY4CFcMVxrNrdBp7Zg 提取码: 5q4p 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦

【Python使用】嘿马头条完整开发md笔记第4篇:数据库,1 方案选择【附代码文档】

嘿马头条项目从到完整开发笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;课程简介&#xff0c;ToutiaoWeb虚拟机使用说明1 产品介绍,2 原型图与UI图,3 技术架构,4 开发,1 需求,2 注意事项。数据库&#xff0c;理解ORM1 简介,2 安装,3 数据库连接…

计算机网络——37认证

认证 目标&#xff1a;Bob需要Alice证明他的身份 Protocol ap1.0&#xff1a;Alice说"A am Alice" 可能出现的问题&#xff1a; 在网络上Bob看不到Alice&#xff0c;因此Trudy可以简单的声称他是Alice 认证&#xff1a;重新尝试 Protocol ap2.0&#xff1a;Alice…