当前位置: 首页 > news >正文

flutter调试

上面的调试The following FormatException was thrown while handling a gesture:
Invalid double
-Infinity874When the exception was thrown, this was the stack: 
#0      double.parse (dart:core-patch/double_patch.dart:113:28)
#1      _CalculatorScreenState._buttonPressed.<anonymous closure> (package:cluac2/main.dart:105:24)
#2      State.setState (package:flutter/src/widgets/framework.dart:1203:30)
#3      _CalculatorScreenState._buttonPressed (package:cluac2/main.dart:96:5)
#4      _CalculatorScreenState._buildButton.<anonymous closure> (package:cluac2/main.dart:273:28)
#5      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1170:21)
#6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:351:24)
#7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:656:11)
#8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:313:5)
#9      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:246:7)
#10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:703:9)
#11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#12     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)
#13     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13)
#14     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
#15     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
#16     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:501:19)
#17     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:481:22)
#18     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:450:11)
#19     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:426:7)
#20     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:389:5)
#21     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:336:7)
#22     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:305:9)
#23     _invoke1 (dart:ui/hooks.dart:328:13)
#24     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:442:7)
#25     _dispatchPointerDataPacket (dart:ui/hooks.dart:262:31)
Handler: "onTap"
Recognizer: TapGestureRecognizer#1c367debugOwner: GestureDetectorstate: possiblewon arenafinalPosition: Offset(1109.0, 314.0)finalLocalPosition: Offset(160.0, 43.0)button: 1sent tap down

ai建议

从你提供的错误信息来看,FormatException: Invalid double -Infinity874 通常表示在尝试将字符串转换为双精度浮点数时出现了问题。在你的计算器应用中,这种情况通常发生在输入不符合预期的情况下,例如尝试解析一个未定义的值或 Infinity。

解决方案
检查输入值:确保在调用 double.parse 之前,输入的字符串是有效的数字。可以使用条件语句来避免解析无效字符串。

处理特殊情况:添加逻辑以处理特定的操作符和边界条件,例如除以零或计算负数的平方根等。

以下是改进后的 _buttonPressed 方法,它增加了一些安全检查,以确保不会对无效字符串执行解析

void _buttonPressed(String buttonText) {setState(() {_playSound(buttonText); // 按钮被按下时播放音效if (buttonText == "C") {_output = "0";_num1 = 0;_num2 = 0;_operator = "";_displayText = "";} else if (["+", "-", "x", "÷"].contains(buttonText)) {_num1 = _tryParseDouble(_output);_operator = buttonText;_displayText = "$_output $buttonText";_output = "0";} else if (buttonText == "=") {_num2 = _tryParseDouble(_output);double result = 0;if (_operator == "+") {result = _num1 + _num2;} else if (_operator == "-") {result = _num1 - _num2;} else if (_operator == "x") {result = _num1 * _num2;} else if (_operator == "÷") {if (_num2 != 0) {result = _num1 / _num2;} else {_output = "Error"; // 避免除以零return;}}_output = result.toString();String historyItem = "$_num1 $_operator $_num2 = $_output";_history.add(historyItem);_saveHistory(); // 保存历史记录} else if (buttonText == "√") {double num = _tryParseDouble(_output);if (num >= 0) {double sqrtResult = math.sqrt(num);_output = sqrtResult.toString();} else {_output = "Error"; // 处理负数的平方根}} else if (buttonText == "%") {double num = _tryParseDouble(_output);double percentage = num / 100;_output = percentage.toString();} else if (buttonText == ".") {if (!_output.contains(".")) {_output += ".";}} else if (buttonText == "±") {double num = _tryParseDouble(_output);num *= -1;_output = num.toString();} else if (buttonText == "←") {if (_output.length > 1) {_output = _output.substring(0, _output.length - 1);} else {_output = "0";}} else if (buttonText == "x²") {double num = _tryParseDouble(_output);double squareResult = num * num;_output = squareResult.toString();} else if (buttonText == "㏒") {double num = _tryParseDouble(_output);if (num > 0) {double logResult = math.log(num);_output = logResult.toString();} else {_output = "Error"; // 对于非正数的对数}} else if (buttonText == "sin") {double num = _tryParseDouble(_output);double sinResult = math.sin(num * math.pi / 180);_output = sinResult.toString();} else {_output = _output == "0" ? buttonText : _output + buttonText;}});
}double _tryParseDouble(String value) {try {return double.parse(value);} catch (e) {// 如果解析失败,返回 0 或其他安全值return 0;}
}

修改要点
引入 _tryParseDouble 方法:这个方法尝试将字符串解析为双精度浮点数,如果解析失败则返回 0。这可以防止因无效输入导致的异常。
检查除法和平方根:在进行除法和求平方根之前,确认分母不为零且被平方的数为非负数。如果条件不满足,则输出一个错误提示。
通过这些调整,可以更好地处理输入并避免 FormatException 错误。请根据需求进行测试,并确保其他功能正常工作。如有任何问题,请继续询问!

还是无声音
flutter: Error playing sound: Unable to load asset: “assets/assets/123_04.mp3”.

相关文章:

flutter调试

上面的调试The following FormatException was thrown while handling a gesture: Invalid double -Infinity874When the exception was thrown, this was the stack: #0 double.parse (dart:core-patch/double_patch.dart:113:28) #1 _CalculatorScreenState._butt…...

使用Web Workers提升JavaScript的并行处理能力

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的…...

【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现

开题报告 随着城市规模的不断扩大和交通拥堵问题的日益严重&#xff0c;综合交通出行管理平台的研究与实现显得尤为重要。现代城市居民对于出行的需求越来越多样化&#xff0c;对于交通信息的获取和处理能力也提出了更高的要求。传统的交通管理方式已经难以满足这些需求&#…...

STM32寄存器结构体详解

一、寄存器结构体详解 对于STM32而言&#xff0c;使用一个结构体将一个外设的所有寄存器都放到一起 二、修改驱动 1、添加清除bss段代码 2、添加寄存器结构体 在寄存器结构体中添加寄存器的时候一定要注意地址的连续性&#xff0c;如果地址不连续的话&#xff0c;要添加占位…...

如何建立devops?

要建立DevOps系统&#xff0c;可以遵循以下步骤&#xff1a; 一、明确目标与确立原则 明确目标&#xff1a;确定DevOps系统的总体目标&#xff0c;例如提高软件发布频率、缩短反馈时间、提升软件质量等。确立原则&#xff1a;确立DevOps的核心原则&#xff0c;包括持续集成&a…...

shell基础(3)

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…...

2024年11月16日Github流行趋势

项目名称&#xff1a;opendatalab / MinerU 项目维护者&#xff1a;myhloli, dt-yy, Focusshang, drunkpig, papayalove等项目介绍&#xff1a;一站式开源高质量数据提取工具&#xff0c;支持PDF/网页/多格式电子书提取。项目star数&#xff1a;16,398项目fork数&#xff1a;1,…...

k8s更新

k8s更新 1.30 升级了 Metrics Server 到 v0.7.0 kubectl get cronjob命令增加了时区列显示 kubectl describe命令在描述VolumeAttributesClass、作业、Pod 模板等时提供了更多信息&#xff0c;有助于深入排查问题。 改进了kubectl logs命令&#xff0c;当 Pod 未找到时会显示所…...

ES6进阶知识一

目录 一、ES6构建工具与模块化 1.1.构建工具 1.1.1.Webpack 安装 Webpack 配置 Webpack 使用 Webpack 1.1.2.Babel 安装 Babel 配置 Babel 1.2.ES6模块化 1.命名导出导入 导出模块 导入模块 2. 默认导出与导入 导出模块 导入模块 1.3.完整案例展示 1. 项目结构…...

C#/WinForm拖拽文件上传

一、首先创建一个上传文件的类&#xff0c;继承Control类&#xff0c;如下&#xff1a; public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制&#xff0c;而不使用操作系统的绘制Cont…...

IT运维的365天--019 用php做一个简单的文件上传工具

前情提要&#xff1a;朋友的工作室&#xff0c;有几个网站分布在不同的服务器上&#xff0c;要经常进行更新&#xff0c;之前是手动复制压缩包到各个服务器去更新&#xff08;有写了自动更新的Shell脚本&#xff09;。但还是觉得太麻烦&#xff0c;每次还要手动传输压缩包到各个…...

详细的oracle rac维护命令集合

一、查看命令 所有实例和服务的状态 $srvctl status database -d orcl Instance orcl1 is running on node db1 Instance orcl2 is running on node db2 单个实例的状态 $ srvctl status instance -d orcl -i orcl2 Instance orcl2 is running on node db2 单个节点的应用程序…...

23 种设计模式详解

设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式&#xff0c;共七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式、 组合模…...

Python毕业设计选题:基于django+vue的二手物品交易系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 店铺管理 二手物品管理 广告管理 留言反馈 订单…...

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…...

Rust学习(五):泛型、trait

Rust学习&#xff08;五&#xff09;&#xff1a;泛型、trait 1、泛型&#xff1a; 相信小伙伴们一定还记得&#xff0c;之前我们实现了一个add函数&#xff0c;并指定了参数类型为&#xff1a;i32&#xff1a; fn add(x:i32, y:i32) ->i32 {x y }这里我们就会遇到一个问…...

智能零售柜商品识别

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…...

计算机组成原理:总线与微命令

实验四 总线与微命令实验 一、实验目的 1&#xff09; 理解总线的概念和作用。 2&#xff09; 连接运算器与存储器&#xff0c;熟悉计算机的数据通路。 3&#xff09; 理解微命令与微操作的概念。 二、实验要求 1&#xff09; 做好实验预习&#xff0c;在实验之前填写好…...

10月回顾 | Apache SeaTunnel社区动态与进展一览

各位热爱 Apache SeaTunnel 的小伙伴们&#xff0c;社区10月份月报来啦&#xff0c;请查收&#xff01; 这里将记录Apache SeaTunne社区每月动态和进展&#xff0c;欢迎关注。 月度Merge之星 感谢以下小伙伴上个月为 Apache SeaTunnel 所做的精彩贡献&#xff08;排名不分先…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...