1.1 Dart语言简介

基础知识

Dart 是一种由 Google 开发的客户端优化编程语言,旨在为多平台应用开发提供高效、可预测的性能。它被设计用于构建移动、桌面、Web 和后端应用程序。Dart 语言的特点包括:

  • 面向对象:Dart 是一种纯粹的面向对象语言,所有东西都是对象,包括数字、函数和 null。所有对象都继承自 Object 类。
  • AOT (Ahead-of-Time) 和 JIT (Just-in-Time) 编译:Dart 支持 AOT 编译,可以将代码编译成高效的机器码,从而实现快速启动和可预测的性能,这对于 Flutter 应用的发布版本至关重要。同时,它也支持 JIT 编译,这在开发过程中提供了快速的“热重载”功能,极大地提高了开发效率。
  • 空安全 (Null Safety):Dart 2.12 版本引入了健全的空安全特性,帮助开发者在编译时捕获空引用错误,从而减少运行时崩溃。
  • 强类型:Dart 是一种强类型语言,这意味着变量在声明时必须指定类型,或者通过类型推断自动确定类型。这有助于在开发早期发现类型相关的错误。
  • 异步编程:Dart 内置了对异步编程的支持,通过 Futureasync/await 关键字,可以轻松处理耗时操作,避免 UI 阻塞。

官方文档链接

Flutter 开发中的应用案例

在 Flutter 开发中,Dart 是唯一的编程语言。Flutter 框架本身就是用 Dart 编写的,所有的 UI 界面、业务逻辑、状态管理等都离不开 Dart 语言。Dart 的 AOT 编译能力使得 Flutter 应用能够编译成原生机器码,从而获得接近原生的性能。而 JIT 编译和热重载则让 Flutter 的开发体验非常流畅。

案例:一个简单的 Flutter 应用结构

当我们创建一个新的 Flutter 项目时,main.dart 文件是应用的入口。在这个文件中,我们可以看到 Dart 语言的基本结构和 Flutter 框架的结合。

dart
复制代码
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

案例分析:

  • void main(): 这是 Dart 应用程序的入口点,类似于 C++ 或 Java 中的 main 函数。runApp() 是 Flutter 框架提供的函数,用于启动 Flutter 应用。
  • import 'package:flutter/material.dart';: 这是 Dart 的 import 语句,用于导入 Flutter 的 Material Design 库。在 Dart 中,package: 前缀用于导入项目依赖的包。
  • class MyApp extends StatelessWidget: MyApp 是一个 Dart 类,它继承自 Flutter 的 StatelessWidget。这展示了 Dart 的面向对象特性以及 Flutter 中 Widget 的概念。StatelessWidget 表示一个不依赖于状态变化的 Widget。
  • class MyHomePage extends StatefulWidget: MyHomePage 继承自 StatefulWidget,表示一个有状态的 Widget。它与 _MyHomePageState 类配合使用,管理其内部状态 _counter
  • int _counter = 0;: 这是一个 Dart 变量声明,int 指定了变量的类型,_counter 是变量名。下划线 _ 前缀表示这是一个私有变量(在 Dart 中,以下划线开头的标识符在库外是不可见的)。
  • void _incrementCounter(): 这是一个 Dart 函数,用于增加 _counter 的值。setState() 是 Flutter 框架提供的函数,用于通知框架状态已更改,需要重新构建 UI。
  • Text('$_counter'): 这是一个 Dart 字符串插值(String Interpolation)的例子,$_counter 会将 _counter 变量的值嵌入到字符串中。

通过这个简单的案例,我们可以看到 Dart 语言的基础语法(变量、函数、类、对象、导入等)是如何与 Flutter 框架紧密结合,共同构建用户界面的。Dart 的简洁性和强大的特性使得 Flutter 成为一个高效的跨平台开发框架。