Flutter:自定义错误显示

为什么要自定义错误处理

以下面数组越界的错误为例:

class _YcHomeBodyState extends State<YcHomeBody> {List<String> list = ['苹果', '香蕉'];Widget build(BuildContext context) {return Center(child: Column(children: [Text(list[0]),Text(list[2]),],));}
}

当构建失败后会在屏幕上如下显示,这样不太友好,是否可以进行自定义错误显示呢?
在这里插入图片描述

自定义错误显示

使用Flutter的错误处理机制:Flutter提供了一个全局的错误处理机制,可以通过重写ErrorWidget.builder来自定义错误显示。

自定义的错误widget

class CustomErrorHandle extends StatelessWidget {final String errorMessage;const CustomErrorHandle({Key? key, required this.errorMessage}): super(key: key);Widget build(BuildContext context) {return Scaffold(body: Container(width: MediaQuery.of(context).size.width,height: MediaQuery.of(context).size.height,color: Colors.grey.withOpacity(0.5),child: Center(child: Container(padding: const EdgeInsets.all(20),width: MediaQuery.of(context).size.width * 0.8,height: MediaQuery.of(context).size.height * 0.3,decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.white),child: Column(children: [Row(children: const [Icon(Icons.warning_amber_sharp),Text("错误提示",style: TextStyle(fontSize: 20),)],),Expanded(child: Padding(padding: const EdgeInsets.symmetric(vertical: 10),//当超出两行时,文本将被截断child: Align(alignment: Alignment.topLeft,child: Text(errorMessage,overflow: TextOverflow.ellipsis,maxLines: 2,),)),),Row(mainAxisAlignment: MainAxisAlignment.end,children: [TextButton(onPressed: () {Navigator.pop(context);},child: const Text('确定'))],),],),),),));}
}

全局监听

main() {// 全局错误处理机制FlutterError.onError = (FlutterErrorDetails errorDetails) {print('错误消息:$errorDetails');ErrorWidget.builder = (FlutterErrorDetails errorDetails) {return CustomErrorHandle(errorMessage: errorDetails.exception.toString(),);};};runApp(const MyApp());
}

在这里插入图片描述
如果不想显示系统提示的异常信息,可以进行自定义,比如:

 String errorMessage = '发生错误,请稍后重试。';var exception = errorDetails.exception;if(exception is RangeError){errorMessage ='数组越界';}return CustomErrorHandle(errorMessage: errorMessage,);

在这里插入图片描述

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

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

相关文章

库迪身陷“价格”囹圄,融资苦难户还有突围的希望吗?

作者 | 心怡 来源 | 洞见新研社 三伏天已至&#xff0c;正是咖啡品牌借冰咖笑傲市场的好时机。没想到的是&#xff0c;靠低价狂奔的库迪却率先传出涨价的消息。 消息称&#xff0c;7月起&#xff0c;库迪划线价格上调1-2元&#xff0c;8.8元的团购价涨到9.9元&#xff0c;热门…

open3d 通过vscode+ssh连接远程服务器将可视化界面本地显示

当使用远程服务器时&#xff0c;我们希望能像在本地一样写完代码后能立刻出现一些gui窗口。但是目前网络上的资料都不能很好的解决这个问题。本文尝试尽可能简短地解决这个问题。 步骤 1、在服务器上安装open3d 已经非常简化了&#xff0c;可以使用一行代码完成 pip3 insta…

【Distributed】分布式Ceph存储系统

文章目录 一、存储基础1. 单机存储设备1.1 DAS1.2 NAS1.3 SAN1.4 单机存储的问题1.5 商业存储解决方案 2. 分布式存储&#xff08;软件定义的存储 SDS &#xff09;分布式存储的类型 3. Ceph 简介4. Ceph 优势5. Ceph 架构6. Ceph 核心组件7. OSD 存储后端7.1 Filestore7.2 Blu…

java 通过Json -schema完成对数据的效验

Json -schema 1.对象的效验2.数组套对象的效验3. 字符串的效验长度效验(minLength)(maxLength)正则效验日期和时间 4.对象套对象效验5.对象套数组6. 其他参数required(必须要填&#xff09;enum(范围之内&#xff09;not&#xff08;不&#xff09;anyOf 和allOf&#xff08;双…

龙蜥白皮书精选:面向 HTTP 3.0 时代的高性能网络协议栈

文/高性能网络 SIG 01 背景概述 随着互联网特别是移动互联网的快速发展&#xff0c;对互联网通信协议提出了新的诉求。经过多年的发展&#xff0c;QUIC 协议在 2021 年正式被 IEFT 标准化&#xff0c;成为 HTTP 3 的标准传输层协议。QUIC 是基于 UDP 实现的面向连接可靠有序…

Linux(centos7)下安装mariadb10详解

目录 问题 1.旧版本删除 2.创建MariaDB.repo文件 3.安装mariadb10 4.初始化配置 5.设置密码 6.测试 7.其他 配置字符集 MariaDB 和 MySQL 之间存在紧密的关系。 起源&#xff1a;MariaDB 最初是作为 MySQL 的一个分支而创建的。它的初始目标是保持与 MySQL 的兼容性&a…

如何使用vb上位机串口通信

今天我来分享一下如何使用vb上位机串口通信。首先&#xff0c;我们需要准备一台具有串口的上位机设备和一台计算机。刚好&#xff0c;我这里有上位机入门&#xff0c;学习线路图&#xff0c;各种项目&#xff0c;需要留个6。接下来&#xff0c;我们需要安装相应的控件和程序包。…

Redis进阶

Redis之父安特雷兹 redis x.x.x第二位是偶数的是稳定版本 redis7安装单机物理机安装&#xff1a; https://blog.csdn.net/G189D/article/details/129185947 数据类型 bitmap 统计二值状态的数据类型 最大位数2^32位&#xff0c;他可以极大的节约存储空间&#xff0c;使用…

万物皆可截图:SwiftUI 中任意视图(包括List和ScrollView)截图的通用实现

功能需求 在使用 SwiftUI 开发的过程中,有时我们希望能够对特定视图进行截图: 如上图所示:我们实现了 SwiftUI 5.0(iOS 17)中对任意视图(List、gif动画、ScrollView 等等)进行截图的功能。 从目前来说,大家在 SwiftUI 中截图会面临一些问题: 官方的 ImageRenderer 类…

MongoDB踩过的坑

目录 启动MongoDB服务 可视化工具&#xff1a;MongoDB Compass 由于目标计算机积极拒绝&#xff0c;无法连接 BSONObj size: xxxx is invalid. Size must be between 0 and 16793600 (16MB) 启动MongoDB服务 1. 打开CMD 2. 进入安装MongoDB文件夹中的bin目录 3. mongod -…

猜数字小游戏但多语言版本(C、Java、Golang、python、JavaScript)

文章目录 前言C语言版本语法风格应用领域C 语言实现猜数字小游戏 Java语言版本语法风格应用领域Java语言实现猜数字小游戏 GO语言版本语法风格应用领域GO语言实现猜数字小游戏 python版本语法风格应用领域python语言实现猜数字小游戏 JavaScript版本语法风格应用领域JavaScript…

Jmeter的常用设置(二)【处理乱码问题】

文章目录 前言一、察看结果树响应结果是乱码_解决方法 方法一&#xff1a;在察看结果树之前添加 后置处理器 中的 “BeanShell PostProcessor” 来动态修改结果处理编码方法二&#xff1a;在配置文件中修改二、使用步骤 1.引入库2.读入数据总结 前言 接口测试中遇到的各种问题…