当涉及到跨平台开发时,Flutter是快速增长的技术之一,而制作Flutter应用程序背后的秘诀是Dart语言。
即使您不熟悉Dart,也可以开始开发Flutter应用程序,本教程将涵盖您需要知道的基本语法和信息,以便您能够自如地构建Flutter应用程序。
什么是Dart?
Dart是一种多功能和客户端优化的语言,用于在任何网络或移动平台上快速开发应用程序,并可用于桌面和嵌入式设备。Dart语言的核心目标是为您提供一套工具和编程语言,使您的工作效率提高,并随着开发人员的要求和需要的增加而不断发展。
Dart是一种全面的语言,提供优秀的语言能力,如Future、Stream、Sound Null Safety等。
Dart的设计对大多数具有不同编程背景的开发者来说都是熟悉的。因此,无论你是否有JavaScript和TypeScript的背景,或者你一直是一个面向对象的程序员,你都会发现使用Dart很熟悉。
而且,由于Dart的架构,杀手锏、热重载和声明式编程都可以在Flutter中实现。
更重要的是,Dart还带有许多内置库,如dart:ync、dart:convert、dart:html、dart:io等,以及一个奇妙的生态系统和出色的软件包管理器pub.dev。
无论你是否想使用Flutter,Dart都将是你学习和在你的下一个应用程序中使用的最佳选择。
如果你想快速尝试一下,你可以在线使用dartpad.dev。
如何使用Dart
在您开始创建Flutter应用程序之前,您应该了解一些Dart的概念。
1.Main()函数。
每个应用程序的入口是main()
函数。即使你想在控制台打印一些东西,你也必须有一个main()
的部分。
void main() {
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
}
在Flutter中,你将从PROJECT_ROOT/lib/main.dart
中的main()
函数开始你的应用程序,在那里你将你的主部件传递给runApp()
,它将把它附加到屏幕上。这就是第一个主入口点。
void main() {
runApp(MyApp());
}
2.:
(分号)。
在Dart中你需要;
(分号),在上面的例子中你可以看到。
runApp(MyApp());
3.类型和空安全
Dart是一种类型安全的语言。它使用静态类型检查和运行时检查。当你学会了这个语法,你就能更快地理解Flutter代码。下面是一个简单变量的解剖图。
[修改器] [类型] [变量_名称] = [值]。
// e.g:
final String name = "Majid Hajian";
虽然类型是强制性的,但由于类型推理的原因,类型注释是可选的。所以,你可能会遇到这种情况。
var name = "Majid Hajian"; // from now on `name` is a String;
Dart中最常见的初始化变量修饰符是var
,final
,const
, 和late
,但请记住,当你在变量名前使用类型时,你可以使用所有的修饰符,除了var
。
var name = "Majid Hajian";
String name = "Majid Hajian";
final String name = "Majid Hajian";
const String name = "Majid Hajian";
使用var
或不使用修饰符可以创建一个灵活的变量,这意味着你可以随时改变其值。如果你从不打算修改这个变量,你应该使用final
,它只设置一次变量,或者使用const
,它形成一个编译时常量。
但也有更复杂的情况。让我们来看看Map
和List
的类型定义。
// Type of a List (Array): List<TYPE_OF_MEMBER>
// e.g:
List<String> names = ['Majid', 'Hajian'];
// Type of a Map (Key-Values): Map<Key_TYPE, VALUE_TYPE>
// e.g:
Map<String, number> ages = {
'sara': 35, 'susan: 20};
在很多情况下,你可能没有给Dart分析器提供足够的信息,你可能会面临一个类型转换错误。让我们看一个例子。
var names = [];
变量类型推断List<dynamic>
和dynamic
可能是任何类型,因为我们在初始化变量时没有提供数组的可能类型。因此,Dart将类型投给了List<dynamic>
,在这里它可以是任何类型。通过在初始化或启动变量时给值添加注解,我们可以防止这种类型的错误。
final names = <String>[];
// Or
final List<String> names = [];
从Dart 2.12开始,Dart是一种健全的null安全语言,这意味着你的代码中的类型默认是不可置空的,这表明一个变量不能包含null
,除非你说它们可以。
final String name = null;