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判断了的,还要搞得这么复杂。

相关推荐
weixin_493503671 小时前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
尾善爱看海4 小时前
前端算法与手写题集
前端·算法
徐小夕4 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
萧鼎6 小时前
Python 高性能Web框架神器 FastAPI:自动生成API文、基于Pydant、异步请求处理全搞定
前端·python·fastapi
IT_陈寒7 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
计算机魔术师7 小时前
5000亿估值冲刺科创板,DeepSeek 为何急着上市?
前端
我血条子呢7 小时前
前端解析word方案
前端·word
kyriewen7 小时前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
申行7 小时前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端
两只羊ovo7 小时前
Vue 3 + DeepSeek 流式输出实战:从“干等”到“打字机”体验
前端·vue.js