四:Flutter之Dart第一节?
1: Dart介绍和安装?
1.1: 认识Dart
Google为Flutter选择了Dart就已经是既定的事实、无论你多么想用你熟悉的语言、比如JavaScript、Java、Swift、C++等来开发Flutter至少目前是不可能的。
其实如果你对编程语言有足够的自信、Dart的学习过程甚至可以直接忽略。
- 因为你学习N中编程语言后、你会发现它们的差异并不大
- 无非就是语法上的差异 + 某些语言有某些特性
- 在我初次接触Flutter的时候、并没有专门去看Dart语法、而是对于某些语法不太熟悉的时候回头去了解而已。
1.2: 安装Dart
为什么还需要安装Dart呢?
事实上在安装Flutter SDK的时候、它已经内置了Dart了、我们完全可以直接使用Flutter去进行Dart的编写并且运行.但是、如果你想要单独学习Dart、并且运行自己的Dart代码、最好去安装一个Dart SDK。
下载Dart SDK
到Dart官网去下载对应操作系统的Dart:https://dart.dev/get-dart
无论是什么操作系统、安装方式都是两种:通过工具安装或者直接下载SDK、配置环境变量1.2.1: 通过工具安装
- windows可以通过Chocolatey
- macOS可以通过Homebrew
- 具体安装操作官网网站有详细的介绍
1.2.2: 直接下载Dart SDK、配置环境变量来安装
- 下载地址:https://dart.dev/tools/sdk/archive
- 我采用了这种安装方式
- 下载完成后、根据路径配置环境变量即可
[# [Dart 编程入门之安装SDK,选择编辑器以及编写Hello World!](# Dart 编程入门之安装SDK,选择编辑器以及编写Hello World!1.3:VSCode 配置Dart
学习Dart过程中、使用VSCode作为编辑器
- 一方面编写代码非常方便、而且界面风格我也很喜欢
- 另一方面我可以快速在终端看到我编写代码的效果
使用VSCode编写Dart需要安装Dart插件:我目前给这个VSCode安装了四个插件
- Dart 和 Flutter插件是为了Flutter开发准备的
- Atom One Dark Theme是我个人比较喜喜欢的一个主题
- Code Runner可以点击右上角的按钮让我快速运行代码
2. Hello Dart
2.1: Hello World
接下来、就可以步入主题了、学习编程语言、从祖传的Hello World开始
在VSCode中新建一个helloWorld.dart文件、添加下面的内容
新建一个文件夹、从VSCode选择文件夹
图片.png- 编写代码如下:
main(List<String> args) { print('hello world dart'); }
- 执行右上角的按钮(当你安装了Code Runner插件以后)、会发生报错:
[Running] dart "/Users/qxu7859/Desktop/Dart练习/helloWorld.dart"
Dart_LoadScriptFromKernel: The binary program does not contain 'main'.
- 先保存代码、 再运行就OK👌了
2.2: 程序的分析
接下来就是程序的分析
- 一:Dart 语言的入口也是main函数、并且必须显示的进行定义;
- 二:Dart的入口函数main是没有返回值的;
- 三:传递给main的命令行参数、是通过List<String>完成的;
1: 从字面值就可以理解List是Dart中的集合类型;
2: 其中的每一个String都表示传递给main的一个参数;- 四:定义字符串的时候、可以使用单引号''或者双引号"";
- 五:每行语句必须使用分号结尾、很多语言并不需要分号、比如Swift、javaScript;
3: 定义变量
3.1: 变量声明
明确声明变量的方式、格式如下:
- 变量类型 变量名称 = 赋值;
示例代码: String name = 'lishengbing'; int age = 18; double height = 1.88; print('name=${name}, age=${age}, height=${height}');
注意事项⚠️:定义的变量可以修改值、但是不能赋值其他类型
name = 'new value'; 正确✅
name = 18; 错误❌3.2: 类型推导(Type Inference)
类型推导声明变量的方式、格式如下:
- var/dynamic/const/final 变量名称 = 赋值;
3.2.1: Var的使用
var 正确使用示例:
- runtimeType用于获取变量当前的类型 var name = 'lishengbing'; name = 'make'; print('runtimeType=${name.runtimeType}') // String
--
var 错误用法:var age = 18; age = 'lishengbing'; // 不可以将String类型赋值给一个int类型
3.2.2: dynamic的使用
如果确实希望这样做、可以使用dynamic来声明变量:
- 但是在开发中、通常情况下不使用dynamic、因为类型的变量会带来潜在的危险
dynamic name = 'lishengbing'; print(name.runtimeType); // String name = 18; print(name.runtimeType); // int
3.2.3: final & const的使用
final 和 const 都是用于定义常量的、也就是说定义之后值都不可以修改 final name = 'lishengbing'; name = 'final'; // 不可以修改❌ const age = 18; age = 28; // 不可以修改 ❌
final 和 const 有什么区别呢?
- const在赋值时、赋值的内容必须是在编译期间就确定下来的。
- final在赋值时、可以动态获取、比如赋值一个函数。
String getName() { return 'lishengbing'; } main(List<String> args) { const name = getName(); // 错误的做法,因为需要执行函数才可以获取到值 final name = getName(); //正确的错误 }
final 和 const的小案例:
- 首先、const是不可以赋值为DateTime.now()
- 其次、final一旦被赋值后就有确定的结果、不会再次赋值
const time = DateTime.now(); // 错误的赋值方式 final time = DateTime.now(); print(time); // 2019-09-18 16:04:20.768250 >``` const 放在赋值语句的右边、可以共享对象、提高性能; - 这里可以暂时先做了解、后面讲解类的常量构造函数时、在提到这个概念。
class Person { ------const Person(); } main(List<String> args) { final a = const Person(); final b = const Person(); // const赋值在右边=true print('const赋值在右边=${identical(a,b)}'); final m = Person(); final n = Person(); // 不用const赋值在右边=false print('不用const赋值在右边=${identical(m,n)}'); } >```