刚开始学习Dart语言,傻傻的分不清?、??、!怎么用,下面就总结一下。

1、定义常量/变量

报错解决1、Change 'String' to 'Null' type annotation 即改变类型为Null

报错解决2、Make 'aaa' nullable 使aaa可为空,即取消非空判定

2、定义有返回值的方法

 报错解决1、Make the return type nullable 即返回类型取消非空判定

报错解决2、Replace the return type with 'Null' 即返回类型为Null

3、1和2的配合使用

Null getA() {return null;
}
String? getA() {return null;
}

都可以使用 String? aaa=getA();接收。

由1、2和3可知?有取消非空判断的意思。

4、??的使用

String? getA() {return null;
}
String? aaa=getA();
String bbb= aaa ?? "ccc";
print("aaa=====$aaa");
print("bbb=====$bbb");

String? getA() {return "bbb";
}
String? aaa=getA();
String bbb= aaa ?? "ccc";
print("aaa=====$aaa");
print("bbb=====$bbb");

由结果可知 aaa?? "ccc"表示如果aaa为null则返回ccc,aaa不为null则返回aaa的值

5、??=的使用

String? getA() {return null;
}
print("aaa=====$aaa");
aaa ??= "bbb";
print("aaa=====$aaa");

String? getA() {return "aaa";
}
print("aaa=====$aaa");
aaa ??= "bbb";
print("aaa=====$aaa");

由结果可知 aaa??="bbb";如果aaa为null则将bbb赋值给aaa,如果不为null则返回aaa的值

6、!的使用

报错如下:Null check operator used on a null value  对空值使用的空检查操作符,说明!是空检查操作符,为空则会抛异常.

在使用!的时候最好try...catch...一下,避免上述报错,!使用时要慎重.

运行结果如下:

从6可以看出,!会判断是否为空,为空则抛出异常,不为空则正常运行.

7、?   !的使用

(1)

报错:The method '[]' can't be unconditionally invoked because the receiver can be 'null'.  方法'[]'不能被无条件调用,因为接收方可能是'null'.

这里使用?或!号都可以。

(2)

此时不需要使用?或!,因为 List<AAA> list=[] 是正常定义的,与(1)中的不一样List<AAA>? list。

补充:

1、左边?.右边   如果左边为null则返回null,如果左边不为null则返回右边;

2、左边!.右边   如果左边为null则抛出异常,代码不会再继续向下执行,如果左边不为null则返回右边。

所以再使用!和!.时一定要慎重.

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解相关推荐

  1. flutter学习笔记之dart(转载至B站up主筱筱知晓的大地老师)

    一.Dart介绍: Dart是由谷歌开发的计算机编程语言,它可以被用于web.服务器.移动应用 和物联网等领域的开发.Dart诞生于2011年,号称要取代JavaScript.但是过去的几年中一直不温 ...

  2. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  3. Flutter学习笔记 —— 完成一个简单的新闻展示页

    Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...

  4. Flutter学习笔记(一)

    Flutter学习笔记(一) 学习前言 dart安装 vscode配置 持续更新中 学习前言 最近准备学习Flutter,参考B站 Dart Flutter教程_2022精讲Dart Flutter3 ...

  5. Flutter学习笔记(18)--Drawer抽屉组件

    如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件 Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板.通常Drawer是和ListView组 ...

  6. Flutter学习笔记--Gridview网格组件制作相册

    Flutter学习笔记–Gridview网格组件制作相册 效果: GridView可以构建一个二维网格列表,其官方定义参考: https://book.flutterchina.club/chapte ...

  7. Flutter学习笔记 —— CustomPainter自定义画布绘制爱心

    Flutter学习笔记 -- CustomPainter自定义画布绘制爱心 前言 效果图 代码示例 温馨提示 结束语 前言 最近在学习Flutter中 Canvas相关内容,今天尝试写了一个爱心Dem ...

  8. Flutter学习笔记(二)登陆注册界面的实现

    Flutter学习笔记(二)登陆注册界面的实现 简单的登录和注册界面的布局 SharedPreferences存储数据 页面路由和参数传递的心得 这几天按照顺序先完成了登录和注册的页面,没有什么特别的 ...

  9. Flutter学习笔记之-圆形头像实现方式

    Flutter学习笔记之-圆形头像实现方式 开发中如何实现类似圆形图片 Container+BoxDecoration来实现圆角图像 class DemoWidget extends Stateles ...

  10. Dart 语言学习笔记(Dart语言完全指南)

    Dart 语言学习笔记 Part 1:概览 Dart是一门纯OOP语言.所有的类都继承于Object类.null也是对象,变量仅仅存储对象的引用 Dart是强类型语言,即使Dart可以进行类型推断(使 ...

最新文章

  1. lua学习笔记之闭包
  2. POJ 3974-Palindrome
  3. ner 评估指标_序列标注算法评估模块 seqeval 的使用
  4. kafka专题:kafka单机和集群安装详情,Spring Boot如何整合Kafka
  5. 【BZOJ1483】【codevs2335】【hdu5997】梦幻布丁+加强版,LCA+主席树
  6. 全员编程的时代下,软件测试如何转渗透测试?
  7. mysql集群(一)
  8. jquery boxy插件
  9. 第八课:ShuffleNet v1、ShuffleNet v2学习
  10. NoteBook / 期货及衍生品基础(6)
  11. LM在speech recognition中的应用
  12. 干货|对于软件产品质量的一些思考
  13. linux通过网线连路由器上网
  14. 写在京东泄露12G用户信息后的一些感想
  15. Xposed微信支付宝个人免签收款
  16. PhotoScan空三加密操作流程
  17. 如何将linux系统制作成iso镜像文件?通过Mondo Rescue工具将linux系统制作成ISO镜像
  18. 【解决方案】视频结构化智能畜禽养殖场养猪场视频监控的实现,智慧养殖模式为养殖业加成
  19. 鸿蒙的内核版本为什么是安卓,为什么说安卓已经落后于鸿蒙OS?
  20. 斯坦福大学吴恩达机器学习教程中文笔记——week2——多变量线性回归,octave教程

热门文章

  1. 了解计算机病毒及杀毒方式,最简易的计算机病毒查杀方法
  2. Android项目中把bin文件夹里面的.apk文件删除,怎么让它再生成
  3. Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)
  4. 乐优商城_第5章_-vue入门
  5. RecyclerView或是ListView(列表)点击某个条目保持选中【非常巧妙】
  6. m4a怎么转换mp3格式?详细的步骤
  7. 银河麒麟V10 SELinux启动问题
  8. 安卓手机安装magisk
  9. 批量删除微博(转载)
  10. 2022李宏毅第14讲---机器终身学习(Life Long Learning)