Flutter开发中问题及解决方案

1,数据类型转换时使用tryParse可以减少类型转换异常,在转换异常时,返回默认值

例如

double.tryParse(item.totalfee ?? '0') ?? 0

2,使用setState时,增加mounted判断,减少因为执行耗时任务刷新界面时,当前界面已经退出,出现异常。

        if(mounted){setState(() {});}

3,使用FocusNode时,需要在dispose时进行销毁。

  FocusNode focus = FocusNode();@overridevoid dispose() {super.dispose();focus.dispose();
}

4,使用GetXController时尽量采用单例及懒加载方式,可以实现数据共享和内存优化。

  • Get.put():不使用控制器实例也会被创建
  • Get.lazyPut():懒加载方式创建实例,只有在使用时才创建
  • Get.putAsync(): `Get.put()`的异步版版本
  • Get.create(): 每次使用都会创建一个新的实例  

5,使用Completer同步调用,减少callback的使用,使代码逻辑可以更加直观。

  Future<bool> login(String userName,String password) async {var completer = new Completer<bool>();var params = SplayTreeMap<String, dynamic>();params['userName'] = userName;params['password'] = password;LoginVM.Login(params, (data) async {if (data != null && data.isNotEmpty) {completer.complete(true);}else{completer.complete(false);}}, fail: (code, msg) {completer.complete(false);});return await completer.future;}

6,使用Dialog时,可以使用await同步等待,获取返回值。

      var result = await DialogUtil.showCommonDialog(context, content: 'Hello Flutter',rightCallBack: () {Get.back(result: true);}, leftCallBack: () {Get.back(result: false);});

7,使用callback时,可以使用callback?.call();减少非空判断的代码。

    callback?.call(true);

如果有返回值,则可以把需要返回的值,放到call中

8,使用Get页面返回时,如果有返回值的需要做非空判断。

   dynamic arguments = Get.arguments;if (arguments != null) {}

9,针对耗时操作,可以使用compute进行优化,比如数据解析,单一的耗时操作。

///使用compute快速创建Isolate
var allAreaList = await compute(FileUtils.readFileContent,file);///耗时任务
static Future<List<AreaInfo>> readFileContent(File file) async {String fileContent = await file.readAsString();if (fileContent.isNotEmpty) {List<dynamic> list =  json.decode(fileContent);return list.map((e) => AreaInfo.fromDBJson(e)).toList();}else{return [];}
}

10,不要在initState中执行耗时的逻辑,会影响页面载入时间。

注:因为Flutter中默认单线程的,而initState作为一个页面的入口,如果大量同步耗时操作则会影响页面载入渲染的速度。

11,使用策略模式优化if/else的逻辑。


12,使用ListView时,如果顶部出现空白区域无法删除,可以使用如下方式去掉空白。
例如:

MediaQuery.removePadding( context: context, removeTop: true,child)

13,图片加载时可以增加异常监听,处理加载失败的情况,拦截异常。

例如:

 var image = Image.file(File(filePath),fit: BoxFit.cover,width: MediaQuery.of(context).size.width,height: MediaQuery.of(context).size.height);var resolve = image.image.resolve(ImageConfiguration.empty);resolve.addListener(ImageStreamListener((_, __) {//加载成功}, onError: (Object exception, StackTrace? stackTrace) {debugPrint('图片加载失败');}));return image;

14,使用缓存目录时,优先使用await getApplicationSupportDirectory() 对应android中的files目录,getTemporaryDirectory目录下的资源会在内存不足时被清理掉。

15,Dart中的List删除元素时推荐使用removeWhere的方式,使用removeAt的方式会出现数组下标越界的情况。

  list.removeWhere((element) => element.isSelected);

16,Dialog中页面返回时,要区分好parentContext和childContext,使用不当会导致Dialog关闭异常。

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

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

相关文章

中国民用航空局关于民用无人驾驶航空器监管服务有关事宜的公告

《无人驾驶航空器飞行管理暂行条例》&#xff08;以下简称《条例》&#xff09;将于2024年1月1日实施。民航局依据《条例》所赋予的职责&#xff0c;为便于大家遵守&#xff0c;现将具体监管和服务有关事宜公告如下&#xff1a; 一、交通运输部即将颁布《民用无人驾驶航空器运行…

大数据开发--02.环境准备

一.准备三台linux虚拟机 1.分别取名node1,node2,node3 2.配置静态ip 这里以node1为例&#xff0c;配置静态ip地址&#xff0c;其他node2.node3一样 配置完成之后别忘记 systemctl restart network 3.在各自的/etc/hosts文件中编辑三个Ip地址 三台都要配置&#xff0c; 4.然…

功率电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,主要构成材料3.2,绕组形式3.3,封装与骨架4,工艺流程4.1,选择磁芯4.2,绕制线圈4.3,焊接线头4.4,测试5,选型参数5.1࿰

【PostGresql】------ pg多表数据多个条件汇总 使用 union 方法示例代码

1. 示例代码如下&#xff1a; SELECT"ID","DT_DATE","CNAME","RMAN_NAME","DEP_NAME","DEP_ID","INVEST_MAN_NAME","TYPE_NAME","INVEST_LEVEL_NAME","POSITION_NAME",…

第1关:创建数据库

任务描述 创建一个名为mydata的数据库。 相关知识 MySQL创建数据库的语法如下&#xff1a; 其中&#xff0c;database_name是要创建的数据库的名称。 开始你的任务吧&#xff0c;祝你成功&#xff01; #请在此处添加实现代码 ########## Begin ########## CREATE DATABASE …

探索Python中的聚类算法:K-means

在机器学习领域中&#xff0c;聚类算法被广泛应用于数据分析和模式识别。K-means 是其中一种常用的聚类算法&#xff0c;它能够将数据集分成 K 个不同的组或簇。本文将详细介绍 K-means 算法的原理、实现步骤以及如何使用 Python 进行编程实践。 什么是 K-means&#xff1f; …

asp.net在线租车平台

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; asp.net在线租车平台 用户功能有首页 行业新闻用户注册车辆查询租车介绍访问后台 后台管理员可以进行用户管理 管…

套路化编程:C++与C#之间的zlib(libz)压缩传输

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys 因为需要压缩&#xff0c;因为一端是C&#xff0c;所以用了zlib&#xff08;libz&#xff09;&#xff0c;因为用了zlib&#xff0c;所以C#端也要用兼容zlib格式的方法。 目录 一、技术要点 1.1…

ubuntu20.04安装Pycharm

下载pycharm安装包 https://www.jetbrains.com/pycharm/download/#sectionlinux 使用社区版点击download 下载好的pycharm如图所示&#xff0c;右键解压&#xff1a; 打开终端&#xff0c;输入cd命令&#xff0c;进入刚刚解压文件夹下的bin文件夹&#xff0c;命令行是cd 文…

深度优先搜索(DFS)与广度优先搜索(BFS)在 Java 中的应用

引言&#xff1a; 在算法和数据结构中&#xff0c;深度优先搜索&#xff08;Depth First Search&#xff0c;DFS&#xff09;和广度优先搜索&#xff08;Breadth First Search&#xff0c;BFS&#xff09;是两种常用的图遍历算法。它们在解决图相关问题时非常有用&#xff0c;可…

19.WEB渗透测试--抓包技术(下)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;18.WEB渗透测试--抓包技术&#xff08;上&#xff09;-CSDN博客 Burp含义和内容参考&…

CCDP.01.使用NotePad++辅助部署OpenStack的说明

前言 对于象OpenStack&#xff08;OS&#xff09;这样的复杂分布式系统&#xff08;云计算平台&#xff09;&#xff0c;一次部署通过是需要相当的Linux基础、网络基础、分布式系统基础、云计算基础的。这里类比在开发大型复杂系统常常采用的“防御式编程”方法论&#xff0c;探…

LoadBalancerCacheManager not available, returning delegate without caching

警告&#xff1a;LoadBalancerCacheManager not available, returning delegate without caching 背景&#xff1a;更换了redis集群 解决方案&#xff1a; 重启gateway网关服务 也就是重启引用下面这个包的服务 <dependency><groupId>org.springframework.cloud…

写一个简单的 C++ 日志库 - cllogger(3)- CRT

通过上一篇 《写一个简单的 C 日志库 - cllogger&#xff08;2&#xff09;- 日期时间》我们已经掌握了如何通过 std::chrono 提供的日期时间工具转换时间参数为指定格式的字符串。 现在我们可以把各个参数信息拼装为 Entry 实例&#xff0c;交给 OutputMessage() void cllog…

视频无水印批量下载软件|抖音视频提取工具

视频无水印批量下载软件 在当今社交媒体充斥着大量优质视频内容的时代&#xff0c;很多用户都希望能够轻松下载自己喜爱的视频进行收藏或分享。为了满足用户的需求&#xff0c;我们特别推出了一款专业的视频无水印批量下载软件&#xff0c;让您可以方便快捷地获取喜爱的视频内容…

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载

最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题,把接口本地化,但是集成外链播放器接口就不本地化了,我花钱找人写的理解下…

[C语言]——内存函数

目录 一.memcpy使用和模拟实现&#xff08;内存拷贝&#xff09; 二.memmove 使用和模拟实现 三.memset 函数的使用&#xff08;内存设置&#xff09; 四.memcmp 函数的使用 C语言中规定&#xff1a; memcpy拷贝的就是不重叠的内存memmove拷贝的就是重叠的内存但是在VS202…

C++总结

数据类型 基本的内置类型 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 类型限定符 函数 以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的&am…

relative、fixed、absolute 和 static 四种定位有什么区别?

1. relative、fixed、absolute 和 static 四种定位 1. Relative&#xff08;相对定位&#xff09;&#xff1a; 相对定位通过设置 position: relative; 来实现。相对定位相对于元素在文档流中的初始位置进行定位。可以使用 top、right、bottom 和 left 属性来相对于原始位置进…

使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3

本篇文章&#xff0c;聊聊怎么比较稳定的使用 Anthropic Claude 3&#xff0c;以及基于目前表现非常好的模型&#xff0c;来做一些有趣的 AI Native 小工具。 写在前面 在实际体验了半个多月&#xff0c;月初上线的 Anthropic Claude Pro 后&#xff0c;发现 Claude 3 系列模…