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

相关推荐
摹客4 小时前
【3D设计】界面设计中的3D元素:应用场景+5款工具横评(含Three.js)
前端
Hilaku4 小时前
CORS 到底在保护谁?90% 的前端理解错了跨域的本质
前端·javascript·程序员
wno7044 小时前
node.js中使用jquery
前端·node.js·jquery
阿琳a_4 小时前
b-map-viewer:面向 Vue 3 的地图可视化 SDK,从接入到展示再到交互分析
前端·javascript·vue.js·gis·数据可视化·地图
10年前端老司机4 小时前
Agent 商业化困局:热闹的发布会,冷清的付费客户
前端·后端·agent
钱栈up5 小时前
热榜上手|HyperFrames:写HTML出MP4
前端·html
Sailing5 小时前
🚀🚀【封闭结束8】Agent RAG:从零搭建一个可用知识库
前端·后端·agent
Captain1314_李祖团5 小时前
5. MLIR相关语法
java·前端·javascript
恋猫de小郭5 小时前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter
Data analyse4565 小时前
web-vitals库接入:LCP、INP、CLS上报与阈值
前端·javascript·数据分析