Numbers
Dart中的number只有两种类型,分别为int和double
在官方文档中明确说明:
Dart numbers come in two flavors:
int

int的值不可大于64位,在navite平台是-263 to 263 - 1,在web上是-253 to 253 - 1,这一点需要注意,可能导致跨平台的bug。
看看源码中int的定义:

可以看到int类继承自num,接下来我们去看看num

可以看到注释中描述,num是int和double的父类,且任何除int和double之外的类型继承或实现num,都会导致编译时错误。
double

这里是意思是,double、int都是num的子类,num提供了诸如+、-、*、/之类的函数,如果找不到就到math包下找。

同时,支持给double直接赋值int,此时int将自动转换为double

num

在实际开发中,我们也可以直接使用num来定义数值,num就既可以是int,也可以是double,这取决于他的值到底是什么。
string

支持$的写法

也支持条件表达式

多行字符串

官方建议使用三个单引号或双引号来实现换行,实测使用\n依然有效,但不允许中间使用回车符(编译报错)。
原始字符串
使字符串中的特殊字符,如\n、\t等以纯文本的形式存在
看下面的例子:

boolean

在dart中,boolean类型使用bool定义,同时只有true和false。
Runes and grapheme clusters
这块主要是说dart使用的是utf-16的字符编码,讲解了如何在dart中使用UniCode编码,看下面的例子:

输出是个笑脸。
以及如果要读取或者写入单个Unicode字符,建议使用characters,下面看看官方的案例:
dart
import 'package:characters/characters.dart';
void main() {
var hi = 'Hi 🇩🇰';
print(hi);
print('The end of the string: ${hi.substring(hi.length - 1)}');
print('The last character: ${hi.characters.last}');
}
dart
dart run bin/main.dart
Hi 🇩🇰
The end of the string: ???
The last character: 🇩🇰
有经验的同学应该可以发现这里的DK是个特殊字符,明显比英文DK要矮点。
那么为什么会出现这样的情况呢?

我打印了这个字符串的长度,结果是7。
借助AI,


这样我们就理解了。
现在我们修改下代码,再次运行

这样我们就理解了文档的意思。以后在遇到类似问题的时候,做到心中有数。
Symbols
表示一种不会被改名的name,对通过name引用的api十分有效。
下面是Symbol类的注释
/// Opaque name used by mirrors, invocations and [Function.apply].
看到这里就有所猜猜测了,下面来一段ai的解释:
"Symbol 在 Dart 中被定义为一个 '被镜像(反射)、动态调用和 Function.apply 所使用的不透明名称'。
'不透明名称' 意味着它是一个标识符(如变量名、方法名)的引用,但你无法直接获取其背后的字符串值,这主要是为了支持代码混淆和树抖动优化。
它的主要应用场景是在 dart:mirrors 反射库中,用于在运行时动态地查找和操作类的成员。
此外,在与动态函数调用相关的 API,如 Function.apply 中,也会用到它。
不过需要强调的是,由于 Flutter 为了追求最佳性能和最小应用体积而禁用了 dart:mirrors,所以在日常 Flutter 开发中我们很少直接使用 Symbol,而是用代码生成(如 json_serializable、riverpod)来替代反射的需求。"
暂时了解有这个东西,就ok。