在Windows上搭建Flutter開發環境
安裝Flutter SDK時會帶有Dart環境。下面教程基于Dart3
,Flutter SDK
版本在3.10.0
以上,请知晓。
系統要求
- 建議Windows 10或更高版本(64-bit)
- 磁盤能夠分配給Flutter的大小:1G
- 工具
安裝Flutter SDK
- Flutter官網下載即可Flutter SDK archive,注意:版本會不停變更,筆者這裡以2023-05-16的最新版本為主即
3.10.0
。 - 将Flutter Sdk的zip解压到你想安装Flutter SDK的路径(如:
C:\src\flutter
;注意,不要将flutter安装到需要一些高权限的路径如C:\Program Files
),会有很多小问题。 - 添加以下环境变量到用户
PATH
:
- 在“用户变量”下检查是否有名为“Path”的条目
- 如果该条目存在, 追加 flutter\bin的全路径,使用 ; 作为分隔符.
- 如果该条目不存在,创建一个新用户变量 Path ,然后将
flutter\bin
的全路径作为它的值,重启电脑生效。
- 运行
flutter doctor
,如果显示有版本好说明安装成功,如:
#......
[√] Flutter (Channel stable, 3.7.12, on Microsoft Windows [版本 10.0.19045.2965], locale zh-CN)
#......
至此环境搭建成功,注意:如果出现AndroidStudio等问题这里不解决,因为这是学习Dart,在后面进行开发时再进一步配置开发环境。
Dart学习
Hello, World
许多应用程序都需顶级main()功能,执行开始的地方,Dart也是。不需显示返回值的函数具有void返回类型。print用于在控制台打印信息。
void main(){
print('Hellow, World');
}
一些重要概念
- 空安全:除非你说明可以为空,否则为空时程序认为这是个错误。
- Dart 支持泛型类型,例如
List<int>
(整数列表)或List<Object>
(任何类型的对象列表)。 - 与 Java 不同,Dart 没有关键字
public
,protected
, 和private
。如果标识符以下划线 (_
) 开头,则它对其库是私有的。有关详细信息,请参阅 库和导入。 - Dart 工具可以报告两种问题:警告和错误。警告只是表明您的代码可能无法运行,但它们不会阻止您的程序执行。错误可以是编译时的,也可以是运行时的。编译时错误会阻止代码执行;运行时错误会导致 在代码执行时引发异常。
快速了解(可选)
下面内容是基于有JavaScript语言基础的情况下需要快速转Flutter开发时的快速上手内容,后续请继续深入学习。
变量
在Dart中,你可以使用var定义变量,其变量类型将由他们的初始值决定。
var name = 'cyr';
var year = 1977;
var image = {
'url':'/cyr.png',
'tag':['cyr'],
};
流程控制语句
Dart也支持常用的流程控制语句
if(yera == 2023){
print('2023');
}else{
print('not is 2023');
}
for(int i = 1;i<=12; i++){
print(i);
}
while(yera<2023){
yera+=1;
}
Functions
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
var result = fibonacci(20);
注释
// This is a normal, one-line comment.
/// This is a documentation comment, used to document libraries,
/// classes, and their members. Tools like IDEs and dartdoc treat
/// doc comments specially.
/* Comments like these are also supported. */
Imports
/// Importing core libraries导入包
import 'dart:math';
Class
Class Card{
String name;
DatetIME? launchDate;
// Read-only non-final property_只读
int? get launchYear => launchDate?.year;
// Named constructor that forwards to the default one.
Card.unlaunched(String name):this(name:null);
}
Enums(枚举)
枚举是一种枚举一组预定义的值或实例的方法,以确保不会有任何其他该类型的实例。
enum Type {one,two,there}
///使用
final myTyoe = Type.one;
if(myType == Type.one){
print('this is one');
}
Inheritance(继承)
下面是单一继承
class CardTwo extends Card{
double altitude;
CardTwo(super.name, super.launchDate, super.altitude);
}
Mixin(混入)
Mixin 是一种在多个类层次结构中重用代码的方法。
mixin Swimming{
void swim{
print('swimming......');
}
}
class CardThere extends Card with Swimminng {}
///使用
CardThere.swim();//输出swimming......
Interfaces and abstract class(接口和抽象类)
接口
abstract class Animal {
void eat();
}
class Dog implements Animal {
///@override注解可以后续再理解,这里不阐述
@override
void eat() {
print('Dog is eating.');
}
}
抽象类
abstract class Animal {
void eat();
}
abstract class Mammal extends Animal {
void run();
}
class Dog extends Mammal {
@override
void eat() {
print('Dog is eating.');
}
@override
void run() {
print('Dog is running.');
}
}
其实接口和抽象类很像,但是却有不同的使用情况,可以研究。
Async(异步)
async
并await
有助于使异步代码易于阅读,dart也支持异步。
Future<void> printWithDelay(String message) {
return Future.delayed(oneSecond).then((_) {
print(message);
});
}
Exceptions(异常)
错误处理在程序中必不可少。
原文链接:https://juejin.cn/post/7233678973322559543 作者:陈柒吖