由于要学习Flutter ,了解到了Flutter是用Dart作为开发框架和widget的语言。所以要先学下Dart语言
Dart 其实并不算一门非常新的语言,最早版本发行与 2011 年 10 月,目标是取代 JavaScript 成为下一代 Web
开发语言(很显然他失败了)
为什么 Flutter 会选择 Dart?
因为它符合他们构建用户界面的方式。
中文官网呢说:Dart 是一种 易于学习、 易于扩展、并且可以部署到 任何地方 的 应用 编程 语言。 Google 使用 Dart 来开发
大型应用。
Dart 的特性了解一下:
- Dart 是 AOT(Ahead Of Time)编译的,编译成快速、可预测的本地代码,使 Flutter 几乎都可以使用 Dart 编写。这不仅使 Flutter 变得更快,而且几乎所有的东西(包括所有的小部件)都可以定制。
- Dart 也可以 JIT(Just In Time)编译,开发周期异常快,工作流颠覆常规(包括 Flutter 流行的亚秒级有状态热重载)。
- Dart 可以更轻松地创建以 60fps 运行的流畅动画和转场。Dart 可以在没有锁的情况下进行对象分配和垃圾回收。就像 JavaScript 一样,Dart 避免了抢占式调度和共享内存(因而也不需要锁)。由于 Flutter 应用程序被编译为本地代码,因此它们不需要在领域之间建立缓慢的桥梁(例如,JavaScript 到本地代码)。它的启动速度也快得多。
- Dart 使 Flutter 不需要单独的声明式布局语言,如 JSX 或 XML,或单独的可视化界面构建器,因为 Dart 的声明式编程布局易于阅读和可视化。所有的布局使用一种语言,聚集在一处,Flutter 很容易提供高级工具,使布局更简单。
- 开发人员发现 Dart 特别容易学习,因为它具有静态和动态语言用户都熟悉的特性。
安装Dart
当前 Dart 稳定版本为: 2.2.0
下载后放到D盘 解压 将里面的bin文件夹添加到环境变量的Path中去
步骤:控制面板—系统和安全—系统—高级系统设置—环境变量—系统变量
文件夹 最好不要有中文命名 !!不要学我
这样就ok啦!
编辑器我用的VScode 要下载Dart (Dart Code )插件 然后就可以创建dart文件 写代码学习语言啦~
//注释呢 还是一样的 // 或者 /**/
//数据类型:
//num 数字 String 字符串 int bool 另外几种类型
//print() ---相当于js里的console。log
//'...' (或者 "...") 字符串字面量。
$variableName (or ${expression}) 字符串插值:在字符串字面量中引用变量或者表达式。
main() Dart 程序执行的入口方法,每个程序都 需要 一个这样的方法。
var 一种不指定类型声明变量的方式
重要概念
关键字
默认值
没有初始化的变量自动获取一个默认值为null,类型为数字的变量如何没有初始化其值也是null,不要忘记了数字类型也是对象。
在声明变量的时候,你可以选择加上具体 类型
Optional types(可选的类型)
在声明变量的时候,你可以选择加上具体 类型
Final and const
注:实例变量可以为 final 但是不能是 const 。
如果你以后不打算修改一个变量,使用 final 或者 const。 一个 final 变量只能赋值一次;一个 const 变量是编译时常量。 (Const 变量同时也是 final 变量。) 顶级的 final 变量或者类中的 final 变量在 第一次使用的时候初始化。
Dart的内置类型:
- numbers
- strings
- booleans
- lists (也被称之为 arrays)
- maps
- runes (用于在字符串中表示Unicode 字符)
- symbols
Dart 支持两种类型的数字:
- int 整数值
- double 浮点数
这两者都是num的子类。
num 类型定义了基本的操作符,例如:±*/,abs(),ceil(),floor()…
字符串和数字之间的转换
- int.parse()—字符串转为整数
- double.parse()-----字符串 转为浮点数
- int.toString()-----整数转为字符串
- double.toStringAsFixed ------浮点数保留几位
整数类型支持传统的位移操作符,(<<, >>), AND (&), 和 OR (|) 。
(这块我还理解的不透彻 好想问各种why???)
- assert((3 << 1) == 6); // 0011 << 1 == 0110
- assert((3 >> 1) == 1); // 0011 >> 1 == 0001
- assert((3 | 4) == 7); // 0011 | 0100 == 0111
字符串
Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串(这个应该没啥好说的吧~)
-
const str1 = 'single lady’
-
const str 2= “dsfsdf”‘
-
也可以在字符串中使用表达式,用法是这样的: ${expression}。如果表达式是一个比赛服,可以省略 {}。 如果表达式的结果为一个对象,则 Dart 会调用对象的 toString() 函数来获取一个字符串。
-
和js 一样也可以使用+操作符来吧
-
使用三个单引号或者双引号也可以 创建多行字符串对象:
-
eg: var s1 = ‘’‘You can createm ulti-line strings like this one.’’’;
-
通过提供一个 r 前缀可以创建一个 “原始 raw” 字符串:
-
eg:var s = r"I am yannanna";
Boolean(布尔值)
true / false
Lists(列表)
Maps(键值对相关的对象)
键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次。
- eg: var gifts = {
// Keys Values
‘first’ : ‘partridge’,
‘second’: ‘turtledoves’,
‘fifth’ : ‘golden rings’
};
使用 Map 构造函数也可以实现同样的功能
- eg: var gifts = new Map();
gifts[‘first’] = ‘partridge’;
gifts[‘second’] = ‘turtledoves’;
gifts[‘fifth’] = ‘golden rings’;
Runes
在 Dart 中,runes 代表字符串的 UTF-32 code points
Symbols
一个 Symbol object 代表 Dart 程序中声明的操作符或者标识符。
Functions(方法)
The main() function(入口函数)
每个应用都需要有个顶级的 main() 入口方法才能执行。 main() 方法的返回值为 void 并且有个可选的 List 参数。
下面是一个 web 应用的 main() 方法:
void main() {
querySelector("#sample_text_id")
…text = “Click me!”
…onClick.listen(reverseText);
}
Anonymous functions(匿名方法)
- eg:
printElement(element) {
print(element);
}
var list = [1, 2, 3];
Functions as first-class objects(一等方法对象)
Lexical scope(静态作用域)
Lexical closures(词法闭包)