开始学习Flutter前,你需要先熟悉Dart编程语言——Flutter应用正是用Dart编写的。本页面是对Dart语言的入门介绍,如果你能轻松理解代码示例,可以直接跳过本页。你无需成为Dart专家也能继续学习本系列内容。
Dart语言
Flutter应用使用Dart语言开发,该语言对有Java、JavaScript或其他类C语言经验的开发者来说会非常熟悉。
⚠️ 注意
安装Flutter时会自动安装Dart,因此无需单独安装Dart环境。
以下示例程序从dart.dev获取数据,解码返回的JSON内容并打印到控制台。如果你能自信理解这段代码,可直接跳转到下一页学习。
import 'dart:convert';
import 'package:http/http.dart' as http;
class Package {
final String name;
final String latestVersion;
final String? description;
Package(this.name, this.latestVersion, {this.description});
@override
String toString() {
return 'Package{name: $name, latestVersion: $latestVersion, description: $description}';
}
}
void main() async {
final httpPackageUrl = Uri.https('dart.dev', '/f/packages/http.json');
final httpPackageResponse = await http.get(httpPackageUrl);
if (httpPackageResponse.statusCode != 200) {
print('Failed to retrieve the http package!');
return;
}
final json = jsonDecode(httpPackageResponse.body);
final package = Package(
json['name'],
json['latestVersion'],
description: json['description'],
);
print(package);
}这段程序包含两部分:Package类声明和位于main函数中的业务逻辑。
Package类展示了Dart类开发中最常用的特性,包含三个成员变量、一个构造函数和一个方法。
Dart是类型安全的语言,通过静态类型检查确保变量值始终匹配其声明类型。虽然定义类时需要为成员标注String类型,但由于类型推断机制,实际开发中常可省略类型标注。示例中main函数里那些以final variableName =开头的代码行就是类型安全的,尽管没有显式声明类型。
Dart还内置了健全的空安全机制。示例中description成员被声明为String?类型,末尾的?表示该属性可为null。其他两个成员则不允许为null,若尝试赋值为null会导致编译错误。这在Package类的构造函数中体现得很明显——它接受两个必需的位置参数和一个可选的命名参数。
接下来是main函数。所有Dart程序(包括Flutter应用)都从main函数开始执行。该函数演示了多个基础Dart特性,包括库导入、异步函数标记、函数调用、if条件控制流等。
初始化代码应该放在哪里?
Flutter应用的入口点位于lib/main.dart文件,默认的main函数如下所示:
// lib/main.dart
void main() {
runApp(const MyApp());
}在调用runApp()前可执行少量初始化操作(耗时不超过一两帧),但要记住此时widget树尚未创建。如果需要执行耗时初始化(如从磁盘或网络加载数据),请采用不会阻塞主线程的方式。具体实现可参考异步编程、FutureBuilder API、延迟组件或处理长列表的菜谱文档。
每个有状态Widget都有initState()方法,该方法在Widget创建并加入widget树时调用。你可以重写此方法并在其中执行初始化操作,但必须确保第一行代码是super.initState()。
最后需要了解:热重载(hot reload)不会重新调用initState或main函数,而热重启(hot restart)会同时调用这两个方法。
若对这些概念不熟悉,可通过"Bootstrap into Dart"页面学习Dart基础知识。
下一节:Widget基础
本页是对Dart语言的入门介绍,帮助你熟悉Flutter和Dart代码阅读。即使你对某些代码细节不够清楚也没关系,只要能理解Dart语法结构即可。下一节我们将学习Flutter应用的核心构建单元——Widget。
反馈
本专区内容仍在持续更新中,我们非常欢迎你的宝贵意见!