Dart自从引入null check后写Flutter App总有一种难受的感觉

Dart自从引入null check后写Flutter App总有一种难受的感觉。比如下面的代码,class中定义了一个可null的formCtrl,在使用时候哪怕已经做了if(formCtrl != null)的判断,在if中调用formCtrl的方法,也还是会飘红。

要调用这个对象的方法,您必须这样明确告诉编译器,告诉它你确定这个对象不是null才行:

formCtrl!.createWidget(pageBuildContext);

也就是这样的做法:formCtrl !. 哪怕我上一行if中已经做了不等于null的校验。按照我们日常写其他代码的思维,既然我都做了判断,那整个做了判断代码段中就应该让我直接去调用,可是Dart不行。

已经做了不为null的判断还是不行

如果不要这么难受呢?那你就得换另一种难受的方法,定义一个局部变量,把全局的formCtrl赋值给他,然后再判断这个局部变量,再调用这个局部变量的方法,比如下面这样的:

先定义一个局部变量(局部变量名和全局变量名最好不一样,这是直接用AS的自动提示生成的):

final formCtrl = this.formCtrl;

再对局部的formCtrl做判断后再调用就没有问题了。

使用一个局部变量来解决

估计是不习惯的原因吧,总觉得这种真的难受,明明已经做了不为null判断了的,还要搞得这么复杂。

相关推荐
lilian2331 分钟前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
CarIise28 分钟前
CSS选择器与样式关联
前端·css·tensorflow
里欧跑得慢2 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
IT_陈寒2 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
小灰灰搞电子3 小时前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师3 小时前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端
NeilCarmack3 小时前
Deepseek-harness增加桌面版端序列:第 2 讲 · spawn Electron:当前进程如何“交棒“
前端·javascript·electron
上海魁鲸科技有限公司4 小时前
APS高级排产系统到底有什么用?一文讲清功能、选型与落地建议
前端·microsoft·excel
陈随易4 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
东风破_5 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript